我有一个精神冻结的时刻。如果我有一个以下格式的数组:
$myData = Array
(
[0] => stdClass Object
(
[id] => 1
[busID] => 5
[type] => SMS
[number] => 5128888888
)
[1] => stdClass Object
(
[id] => 2
[busID] => 5
[type] => APP
[number] => 5125555555
)
[2] => stdClass Object
(
[id] => 4
[busID] => 5
[type] => APP
[number] => 5129999988
[verified] => 1
[default] => 0
)
)
我只有一个记录ID的var,如何检索该组的其余细节。
$myID = 2;
// get number 5125555555 and it's type
echo $myData[][$myID]['number']; // ???
答案 0 :(得分:1)
您安排数据的方式是必须遍历数组以识别与$ myID对应的对象。
foreach($myData as $object) if($object->id == $myID) echo $object->number;
另一种方法是将$ myData作为关联数组排列,并将id字段作为键。然后,您只需使用$myData[$myID]->number
即可访问它。
答案 1 :(得分:0)
实际上它是一个包含StdClass对象的数组,尝试循环遍历$ myData并访问每个属性:
foreach ( $myData as $data )
{
print_r($data->id);
// ...
}
答案 2 :(得分:0)
您可以使用以下逻辑来避免循环:
<?php
$myID = 2;
$myData = json_decode(json_encode($myData),1); // Convert Object to Array
$id_arr = array_column($myData, 'id'); // Create an array with All Ids
$idx = array_search($myID, $id_arr);
if($idx !== false)
{
echo $myData[$idx]['type'] . ' -- ' . $myData[$idx]['number'];
}
?>
注意:PHP 5.5支持
array_column
。对于较低版本,您可以使用这个漂亮的库https://github.com/ramsey/array_column/blob/master/src/array_column.php
答案 3 :(得分:0)
你可以创建一个自定义函数来实现这个,你需要传递你想要的数据和id,并且函数将返回具有匹配id的数组,如下所示
function detailsById($myData,$id){
foreach($myData as $data){
if($data->id == $id){
return $data;
}
}
}
只需使用您的数组和ID调用此函数。
$data=detailsById($myData,2);
echo "<pre>";print_r($data);
这会给你:
stdClass Object
(
[id] => 2
[busID] => 5
[type] => APP
[number] => 5125555555
)
进一步打印&#39;数字&#39;和&#39;键入&#39;使用$data
数组
$data['type'];
$data['number'];