从多维数组中检索正确的记录

时间:2014-10-24 16:31:39

标签: php

我有一个精神冻结的时刻。如果我有一个以下格式的数组:

$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']; // ???

4 个答案:

答案 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'];
}
?>

Working Demo

  

注意: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'];