Foreach в массиве json возвращает массив, но не рассматривается как таковой и не может перебрать его - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть массив json (dataArray), отправленный с js до php с использованием JSON .stringuify.

Я получаю вывод после использования json_decode этого объекта, подобного этому:

$resp = json_decode($dataArray,true);
error_log($resp);

Журнал:

[{"id":"0","name":"JOAO"},{"id":"1","name":"TONI"},{"id":"2","name":"ANA"}]

Я пытаюсь получить значения id и name для каждого элемента в этом массиве.

Использование foreach возвращает ошибку, поскольку объект не рассматривается как массив ... Поэтому я попытался привести его к массив, а затем использовать его в foreach, и его размер по-прежнему 1:

$arr = (array) $res;
error_log(sizeof($arr[0]));
foreach ($arr[0] as $dt) {
    error_log($dt);
}

Это возвращает «массив 1 в натуральную величину»

[{"id":"0","name":"JOAO"},{"id":"1","name":"TONI"},{"id":"2","name":"ANA"}]

, и если я пытаюсь error_log($dt->id) Я не получаю никаких результатов ...

Я не понимаю, почему это не рассматривается как массив.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Кажется, вам нужно html_entity_decode() перед декодированием,

$data = html_entity_decode($dataArray);
$output = json_decode($data,true);
foreach ($output as $key=>$dt) {
    echo "id=".$dt['id']," & name=".$dt['name'].PHP_EOL;
}
0 голосов
/ 20 апреля 2020

Если сделать, как предложено:

$data = html_entity_decode($dataTypesArray);
$output = json_decode($data,true);

//or json_decode(json_decode($dataArray),true);
error_log($output);

foreach ($output as $dt) {
    error_log($dt);
}

Я получаю error_log() expects parameter 1 to be string, array given, поэтому я использовал error_log(json_encode($dt)); Теперь я получаю отдельные jsons, но по-прежнему нет успешного входа в систему с идентификатором и именем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...