php - 查找键具有给定值的数组

时间:2013-11-29 15:54:57

标签: php arrays dictionary indexing

我有一系列的词典,如:

$arr = array(
    array(
        'id' => '1',
        'name' => 'machin',
    ),
    array(
        'id' => '2',
        'name' => 'chouette',
    ),
);

如何找到包含name 2(chouette)的数组的id

我是否被迫重新编制数组索引?


谢谢大家,显然我被迫循环遍历数组(我想避免的),我认为这是一些像Python这样的查找功能。所以我想我会用id重新索引。

6 个答案:

答案 0 :(得分:3)

只需找到包含您要查找的ID的数组的索引即可。 SO在此主题上有enough questions and answers

假设你的实际应用程序中有一个包含大量数据的大数组,它可能太慢了(根据你的喜好)。在这种情况下,您确实需要修改数组的结构,以便您可以更快地查找它,例如通过使用id作为名称的索引(如果您只对名称感兴趣)。

答案 1 :(得分:2)

因为for循环是最好的方法,我建议更改你的数组,以便id是数组索引。例如:

$arr = array(
    1 => 'machin',
    2 => 'chouette',
);

这样你就可以获得调用$ arr [2]的名字。没有循环并保持程序在线性时间内运行。

答案 2 :(得分:1)

$name;
foreach ($arr as $value){
    if ( $value['id'] == 2  ){
        $name = $value['name'];
        break;
    }
}

答案 3 :(得分:1)

我想说重新索引信息可能会非常有帮助。如果ID是唯一的,请尝试以下方法:

$newarr = array();
for($i = 0;$i < count($arr);$i++){ $newarr[$arr[$i]['id']] = $arr[$i]['name']; }

结果将是:

$newarr = array('1'=>'machin','2'=>'chouette');

然后你可以用这样的“foreach”来穿过数组:

foreach($newarr as $key => $value){
    if($value == "machin"){
        return $key;
    }
}

但是当然这同样适用于您的旧阵列:

foreach($arr as $item){
    if($item['name'] == "machin"){
        return $item['id'];
    }
}

这取决于你打算用数组做什么; - )

答案 4 :(得分:0)

这有点粗糙,但这会让你得名......

$name = false;
foreach($arr as $v) {
    if($v['id'] == '2') {
         $name = $v['name'];
         break;
    }   
}
echo $name;

所以不,你不是强制重新索引数组,但它会让事情变得更容易。

答案 5 :(得分:0)

array_key_exist()是检查密钥的功能。 foreach将帮助您深入了解多维数组。此函数将帮助您获取数组的name元素,并允许您指定不同的id值。

function findKey($bigArray, $idxVal) {
    foreach($bigArray as $array) {
        if(array_key_exists('id', $array) && $array['id'] == $idxVal) {
            return $array['name'];
        }
    }
    return false;
}

//Supply your array for $arr
print(findKey($arr, '2')); //"chouette"