1

我有一个数组,它是使用 Amazon SimpleDb 进行选择查询的结果。

这是我 print_r($result); 时的示例数据

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[' Attributes'][0]['Value'] 将始终是 test_id

谢谢!

4

3 回答 3

1

您需要重铸阵列。

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

编辑:这取决于您需要做什么 - 如果我打算对结果集进行大量工作,这是我的首选方法 - 我只需要迭代一次集合,然后它的格式可以访问数据迅速地。

于 2013-03-14T02:11:44.987 回答
1

以下将通过引用在您的数组的最后一部分运行。因此,您所做的编辑会反映在$result数组中。

foreach ($result[0]['Attributes'] as &$item) {
    if ($item['Name'] == 'test_id') // do something
}
于 2013-03-14T02:12:06.713 回答
1
foreach ($result as $item) {
  foreach ($item['Attributes'] as $keyvalue) {
    if ($keyvalue['Name'] == 'test_id' || $keyvalue['Name'] == 'test_name') {
      echo $keyvalue['Value'];
    }
  }
}
于 2013-03-14T02:15:04.280 回答