Как получить доступ к значениям в ассоциативном массиве с помощью 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'];
}
}
РЕДАКТИРОВАТЬ: Это зависит от того, что вам нужно сделать - это мой предпочтительный метод, если я планирую много работать с результирующим набором - мне нужно только перебрать набор один раз, а затем это в формате, где можно получить доступ к данным быстро.