0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 258 Просмотров
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Когда вызываю
Код
$test_text1 = $ObjectField_name->field_name0->namer_ff;
Получаю
Код
`stdClass Object
(
    [test_text] => Да, есть
    [test_list] => 0
)
stdClass Object
(
    [test_text] => Нет, нету
    [test_list] => 0
)`

Затем пытаюсь получить


Код
$fieldValues = $ObjectField_name->field_name0->namer_ff;
$fieldTexts = array_reduce($fieldValues, function ($acc, $valueData) {
 
    if (!empty($valueData->test_text)) {
        $acc[] = trim($valueData->test_text);
    }
 
    return $acc;
});

но ничего не выводит. При попытке сделать var_dump и print_r ничего не выводится. Заранее благодарю за помощь!
*

sivers

  • Завсегдатай
  • 1609
  • 223 / 0
Re: Как получить значения массива?
« Ответ #1 : 20.08.2020, 16:58:09 »
Потому что там объект, а не массив.
На связи в телеге @sivers
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Re: Как получить значения массива?
« Ответ #2 : 20.08.2020, 17:05:21 »
Потому что там объект, а не массив.

Подскажите, пожалуйста, а как нужно правльно? Только учусь.
*

sivers

  • Завсегдатай
  • 1609
  • 223 / 0
Re: Как получить значения массива?
« Ответ #3 : 20.08.2020, 17:10:28 »
Подскажите, пожалуйста, а как нужно правльно? Только учусь.
Расскажите что хотите получить на выходе.
На связи в телеге @sivers
*

draff

  • Гуру
  • 5183
  • 365 / 7
  • ищу работу
Re: Как получить значения массива?
« Ответ #4 : 20.08.2020, 17:20:12 »
Код
$fieldTexts = array_reduce($fieldValues[0], function ($acc, $valueData) {
Пробуйте
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Re: Как получить значения массива?
« Ответ #5 : 21.08.2020, 09:20:55 »
$fieldTexts = array_reduce($fieldValues[0], function ($acc, $valueData) {

Выдает ошибку
Код
0 Cannot use object of type stdClass as array
*

sivers

  • Завсегдатай
  • 1609
  • 223 / 0
Re: Как получить значения массива?
« Ответ #6 : 21.08.2020, 09:35:37 »
Расскажите откуда у вас взялся этот объект. По структуре очень напоминает значение поля типа subform с атрибутом repeatable, которое распаковано из json. Если все так, то достаточно было бы распаковывать со вторым аргументом true, чтобы на выходе был массив, а не объект.
Как вариант - перепаковать объект в массив:
Код
$ObjectField_name_arr = json_decode(json_encode($ObjectField_name), true);
либо добавить приведение типа при передаче объекта функции:
Код
$fieldTexts = array_reduce((array)$fieldValues, function ($acc, $valueData) {
...
На связи в телеге @sivers
*

Damarkuzz

  • Захожу иногда
  • 98
  • 1 / 0
Re: Как получить значения массива?
« Ответ #7 : 21.08.2020, 11:36:20 »
Расскажите откуда у вас взялся этот объект. По структуре очень напоминает значение поля типа subform с атрибутом repeatable,
Да, Вы правы, это repeatble внутри еще одного repeatable.
Выполнил первый код, но теперь не получается получить данные нормальным образом.
Например, чтобы получить следующие объекты - необходимо несколько раз делать цикл внутри цикла (или это невернвй способ?)
Код
                        $ObjectField_name_arr = json_decode(json_encode($ObjectField_name), true);
                        $array_dd = $ObjectField_name_arr;
                       
                       
                        foreach ($array_dd as $array_away) {
                           $extract_1 = $array_away;
                           print_r($extract_1);
                        }

*

sivers

  • Завсегдатай
  • 1609
  • 223 / 0
Re: Как получить значения массива?
« Ответ #8 : 21.08.2020, 12:11:31 »
Например, чтобы получить следующие объекты - необходимо несколько раз делать цикл внутри цикла (или это невернвй способ?)
Код
Вполне себе вариант. Выше вы пытались использовать функцию array_reduce - она работает только с массивами. Именно потому была ругань на аргумент-объект. Отсюда рекомендация сделать объект массивом.
Но если эту функцию не использовать, а пробегать значения вложенными циклами, то конвертация не нужна. PHP сейчас умеет перебирать в цикле и объекты тоже. Например, вот такой код вполне работает:
Код
<?php
$obj = new stdClass;
$obj->key1 = "val1";
$obj->key2 = "val2";
$obj->key3 = "val3";
$obj->key4 = "val4";

foreach($obj as $k => $v){
    echo "{$k}: {$v};\n";
}
?>
На связи в телеге @sivers
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Получить переменную из configuration.php

Автор Osprey

Ответов: 10
Просмотров: 222
Последний ответ 26.02.2021, 11:51:14
от ProtectYourSite
Как получить пользовательские поля на странице результатов поиска?

Автор zahar_92

Ответов: 0
Просмотров: 59
Последний ответ 11.02.2021, 23:23:40
от zahar_92
Как получить материал на странице списка материалов через ajax?

Автор zahar_92

Ответов: 9
Просмотров: 226
Последний ответ 10.02.2021, 17:50:52
от effrit
Как получить доступ к админке?

Автор Светлана Р.

Ответов: 15
Просмотров: 319
Последний ответ 06.11.2020, 17:21:44
от Светлана Р.
Как получить информацию о продукте внутри VirtueMart?

Автор Damarkuzz

Ответов: 1
Просмотров: 100
Последний ответ 03.11.2020, 23:11:19
от Damarkuzz