Как перебрать массив объектов, которые были декодированы из JSON в PHP, и отобразить значения - PullRequest
0 голосов
/ 08 марта 2012

Я новичок в PHP и не знаю, как поступить. Массив, который я получаю от декодирования JSOn: (извините, если он отформатирован странно)

array(3) {
 [0]=> array(4) { 
   ["Name"]=> string(22) "Brent's Medical Center"
   ["date"]=> string(26) "/Date(1330449077600-0700)/"
   ["dealType"]=> string(13) "Capital Lease" 
   ["id"]=> string(11) "MO-N007175A" 
 } 
 [1]=> array(4) { 
   ["Name"]=> string(22) "Brent's Medical Center" 
   ["date"]=> string(26) "/Date(1330448929213-0700)/" 
   ["dealType"]=> string(2) "NA"  ..... ["id"]=> string(11) "MO-N007172Q" } [2]=> array(4) { ["Name"]=> string(15) "MOC" ["date"]=> string(28) "/Date(-62135571600000-0700)/" ["dealType"]=> string(2) "NA" ["id"]=> string(9) "MC" } }

Я использовал этот цикл foreach, но не уверен, как получить каждый отдельный элемент из ассоциативного массива.

foreach ($obj as $key => $value) {
    print_r($key);
}

Возвращает:

012

Я пробовал другие решения, но безрезультатно. Может быть, я не совсем понимаю, что происходит, но я не могу заставить себя делать то, что мне нужно / нужно. Спасибо!

Ответы [ 6 ]

1 голос
/ 08 марта 2012

Ну, это зависит от того, как именно вы хотите, чтобы он вернулся.

foreach ($obj as $key => $value) {
   print_r($value);
}

Возвращает ваши данные следующим образом:

array(4) { 
 ["Name"]=> string(22) "Brent's Medical Center"
 ["date"]=> string(26) "/Date(1330449077600-0700)/"
 ["dealType"]=> string(13) "Capital Lease" 
 ["id"]=> string(11) "MO-N007175A" 
} 
array(4) { 
 ["Name"]=> string(22) "Brent's Medical Center" 
 ["date"]=> string(26) "/Date(1330448929213-0700)/" 
 ["dealType"]=> string(2) "NA"  
 ["id"]=> string(11) "MO-N007172Q" 
} 

... etc

Если вы хотите использовать отдельные фрагменты данных на вашем примере, это будет выглядеть так:

foreach ($obj as $each_array) {
   foreach ($each_array as $val){
      echo $val . "<br>";
   }
}

Что бы вернуть:

Brent's MedicalCenter
/Date(1330449077600-0700)/
Capital Lease
... etc
0 голосов
/ 08 марта 2012

У вас есть вложенные объекты, попробуйте следующее:

echo '<table>';

foreach ($obj as $key => $value) {
    echo '<tr>';
    echo '<td>' . $value->Name . '</td>';
    echo '<td>' . $value->date . '</td>';
    echo '<td>' . $value->dealType . '</td>';
    echo '<td>' . $value->id . '</td>';
    echo '</tr>';
}

echo '</table>';
0 голосов
/ 08 марта 2012

Вот упрощенная версия вашей проблемы. Замените ваш массив на тот, что здесь.

<?php
$arr[0] = array('uno'=>'one', 'dos'=>'two');
$arr[1] = array('AAAA'=>'aaaa', 'BBBB'=>'bbbb');

foreach ($arr as $obj) {
    foreach ($obj as $k=>$v) {
        echo "key:$k=>val:$v\n";
    }
}
?>

Если вы хотите получить доступ к чему-то конкретному, вы можете сделать это следующим образом:

echo $arr[1]["BBBB"]; // echoes bbbb

Или ...

echo $arr[1]["Name"]; // echoes Brent's Medical Center
0 голосов
/ 08 марта 2012

Скрипт echo - это именно то, что вы просите его - ключи массива (индексы). Массив имеет 3 значения, поэтому его ключи равны 0, 1, 2.

Похоже, вам нужна $value переменная insode foreach-loop.

Надеюсь, это поможет.

0 голосов
/ 08 марта 2012

Ваша переменная - это массив, заполненный ассоциативными массивами. Поэтому, когда вы выполняете цикл и работаете с $key, это не данные, а индекс вашего родительского массива. Таким образом, простое изменение части массива, с которым вы имеете дело, выполнит ваш исходный пример кода.

foreach ($obj as $key => $value) {
    print_r($value);
}

Теперь каждый $value - это ассоциативный массив с ключами Name, date, dealType и т. Д. Таким образом, вы можете получить свои значения напрямую, например, $value['Name'] для первого цикла будет "Медицинский центр Брента"

0 голосов
/ 08 марта 2012

Предполагая, что $ data - это то, что было var_dump'd в вашем вставленном контенте:

foreach($data as $record) {
    //$record['name'] is now something like "Brent's medical center"
}

Обратите внимание, что вам придется обработать поле даты во что-то более удобное для использования, чем строка.

...