在PHP中选择数组中的值

时间:2012-08-08 00:01:49

标签: php arrays json

好的,所以我把它放在一个JSON数组中( retrieveData()的输出)

{
    "device": {
        "01AA02AB141208VV": {
            "$version": -148598935,
            "$timestamp": 1344382016000,
            "serial_number": "01AA02AB141208VV"
        }
    }
}

但是,我似乎无法选择序列号。我尝试了通常有用的东西,但我不能选择它。这是假设我们还不知道“01AA02AB141208VV”。

$retrieved_data = retrieveData($array['userid'], $array['urls']['transport_url'], $array['access_token']);
$retrieved_data_array = json_decode($retrieved_data, true);
$serial_number = $retrieved_data_array['device'][0]['serial_number'];

我做错了吗?我打赌这很简单,但我无法理解!

谢谢!

3 个答案:

答案 0 :(得分:4)

不幸的是,这并不是很简单。当您不知道Main St.所在的城市时,您正试图找到42 Main St.。找到serial_number的唯一方法是使用{{1}循环$retrieved_data_array直到找到你想要的值。

答案 1 :(得分:3)

你可以使用key()函数来访问关联数组的键(在这种情况下是'$ retrieve_data_array ['device']'数组:

<?php

$data = '{"device": {"01AA02AB141208VV": {"$version": -148598935,"$timestamp": 1344382016000,"serial_number": "01AA02AB141208VV"}}}';

$retrieved_data_array = json_decode($data, true);
$serial_number = key($retrieved_data_array['device']);
reset($retrieved_data_array['device']);

print_r($serial_number);
print_r($retrieved_data_array['device'][$serial_number]);

?>

答案 2 :(得分:1)

这将获取序列号,假设您在设备数组中有多个项目:

$keys = array();

foreach( $retrieved_data_array['device'] as $key => $val ){
  $keys[] = $key;
}

$serial = $keys[0];

如果您知道阵列中只有一个项目,则可以减少...