Форум русской поддержки Joomla!® CMS
07.12.2016, 20:30:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Доп. поле со значением array

 (Прочитано 292 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« : 29.12.2015, 00:12:09 »

Задача узнать значение доп. поля в к2. Делаю так:
Код:
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//значение доп поля с id2
Все выводиться как нужно, но одно доп. поле почему-то всегда возвращает значение array.Тип поля - текстовое поле, ничем не отличается от других.В чем может быть причина?
Joomla! 3.4.5 K2 v2.6.9
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #1 : 29.12.2015, 00:26:06 »

Причина в том, что json_decode декодирует json-строку и возвращает (в вашем случае) объект, который может содержать массив (array). Странно, что вы задали такой вопрос, сумея при этом написать код преобразования json в PHP-переменную.
P.S. если я правильно понял, то значение данного поля представляет собой массив, и если вы делаете echo, то вы увидите на выходе array().
« Последнее редактирование: 29.12.2015, 00:37:21 от robert » Записан
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #2 : 29.12.2015, 00:32:01 »

Приведу кусок кода чуть больше
Код:
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//возвращает номер телефона.все ок
$phones2 = $extra_fields[11]->value;// работает тоже
$phones3 = $extra_fields[12]->value;// работает тоже
$email = $extra_fields[3]->value;//работает тоже
$msgs = $extra_fields[4]->value;//нихрена не работает.возвращает array
Во всех полях ввожу только числа
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #3 : 29.12.2015, 00:38:37 »

Смотрите P.S. предыдущего поста и попробуйте делать
Код
print_r($msgs);
Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #4 : 29.12.2015, 00:42:09 »

var_dump($extra_fields[4]->value);
А лучше перебрать в цикле. У вас завтра поля добавятся/убавятся, ключи массива сменятся и это работать перестанет.
Записан
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #5 : 29.12.2015, 01:05:40 »

Заранее извиняюсь, я не так силен в php как хотелось бы.
Правильно ли я делаю
Код:
$debt = var_dump($extra_fields[4]->value);
Данный код ничего не выводит..
P.S. echo со старым кодом выводит array

Просто никак не могу понять почему значение одних полей выводятся без проблем, а другие никак
Записан
passer
Живу я здесь
******

Репутация: +69/-3
Offline Offline

Пол: Мужской
Сообщений: 829



« Ответ #6 : 29.12.2015, 01:08:55 »

http://php.net/manual/ru/function.var-dump.php
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #7 : 29.12.2015, 01:18:33 »

Код:
$debt = var_dump($extra_fields[4]->value);
Данный код ничего не выводит..
Он и не должен ничего выводить.
Просто var_dump или print_r, и это только с целью дебажить код.
P.S. echo со старым кодом выводит array
Просто никак не могу понять почему значение одних полей выводятся без проблем, а другие никак
Еще раз
значение данного поля представляет собой массив, и если вы делаете echo, то вы увидите на выходе array().
Если после этого все равно не понимаете, то идите изучать PHP.
Записан
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #8 : 29.12.2015, 03:49:39 »

Ситуация прояснилась в довольно интересную сторону.
Код:
$extra_fields = json_decode($row->extra_fields );
$phones = $extra_fields[2]->value;//код работает.Возвращает реальное значение
$debt = $extra_fields[1]->value;//код работает.Возвращает реальное значение
$fio = $extra_fields[4]->value;//код не работает. Возвращает значение array
$email = $extra_fields[3]->value;//код работает.Возвращает реальное значение
Перепробовал кучу самых разных вариантов и пришел к выводу, что данный код нормально работает только для доп. полей с id: 1,2 или 3. доп.поле с id 4 и выше всегда возвращает значение array. Может кто подскажет из-за чего такое может быть?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #9 : 29.12.2015, 09:55:03 »

ТС, вы вообще читаете, что вам писали?
Последний раз: потому что значения этих полей являются массивами.
Записан
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #10 : 29.12.2015, 11:06:32 »

Конечно читаю, то что мне пишут, спасибо большое за ответы. Но объясните как доп.поле(текстовое поле) с id3 возвращает реальное значения, а уже доп.поле(текстовое поле) с id4 и введеными в него теми же цифрами уже идет как массив.Просто хочется докопаться до причины.
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3586


« Ответ #11 : 29.12.2015, 11:21:13 »

Но объясните как доп.поле(текстовое поле) с id3 возвращает реальное значения, а уже доп.поле(текстовое поле) с id4 и введеными в него теми же цифрами уже идет как массив.
Потому что одни данные записываются в БД как текст, другие - как массив. Еще почему? Потому что разработчик так хотел.
Ваше дело - обрабатывать данные в зависимости от их типов или переписать форму, чтобы эти данные имели нужный тип, а не задавать глуппые вопросы. Столько ответов, а вы все стоите на одном месте.
Записан
Duff89
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #12 : 29.12.2015, 11:32:46 »

Странно конечно все это, но в принципе вопрос решен.Буду использовать только поля с id1,2,3.Всем спасибо
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet