Как получить доступ к значениям в ассоциативном массиве с помощью PHP

У меня есть массив, который является результатом запроса выбора с помощью Amazon SimpleDb.

Вот пример данных, когда я print_r($ результат);

Array ( [0] => Array ( [Name] => 5140ede647e74
                       [Attributes] => Array (
                            [0] => Array ( [Name] => test_id [Value] => 5140ede647e74 )
                            [1] => Array ( [Name] => test_name [Value] => test1 )
                            [2] => Array ( [Name] => last_update [Value] => 1363209702 )
                            [3] => Array ( [Name] => created [Value] => 1363209702 ) ) ) ) 

Если я хочу извлечь test_id и test_name, как я могу это сделать? В настоящее время я делаю следующее

<?php foreach ($result as $item) {
    echo $item['Attributes'][0]['Value']; 
    echo $item['Attributes'][1]['Value'];
} ?>

Но я хочу сделать это, ссылаясь на "test_id" и "test_name", потому что, когда я удаляю домен, в котором находятся данные, и повторно вводю данные, порядок каждого атрибута может измениться, поэтому я не могу доверять этому $item[' Атрибуты '][0]['Value'] всегда будут test_id

Спасибо!

3 ответа

Решение
foreach ($result as $item) {
  foreach ($item['Attributes'] as $keyvalue) {
    if ($keyvalue['Name'] == 'test_id' || $keyvalue['Name'] == 'test_name') {
      echo $keyvalue['Value'];
    }
  }
}

Следующее будет проходить через последнюю часть вашего массива по ссылке. Поэтому сделанные вами изменения отражаются в $result массив.

foreach ($result[0]['Attributes'] as &$item) {
    if ($item['Name'] == 'test_id') // do something
}

Вам нужно переделать массив.

$newArray = array();
foreach ($result as $key=>$row)
{        
    foreach ($row['Attributes'] AS $row2)
    {
         $newArray[$key][$row2['Name']] = $row2['Value'];
    }       
}

РЕДАКТИРОВАТЬ: Это зависит от того, что вам нужно сделать - это мой предпочтительный метод, если я планирую много работать с результирующим набором - мне нужно только перебрать набор один раз, а затем это в формате, где можно получить доступ к данным быстро.

Другие вопросы по тегам