我有一系列的词典,如:
$arr = array(
array(
'id' => '1',
'name' => 'machin',
),
array(
'id' => '2',
'name' => 'chouette',
),
);
如何找到包含name
2(chouette)的数组的id
?
我是否被迫重新编制数组索引?
谢谢大家,显然我被迫循环遍历数组(我想避免的),我认为这是一些像Python这样的查找功能。所以我想我会用id
重新索引。
答案 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"