[英]php - Find array for which a key have a given value
我有一系列的字典,例如:
$arr = array(
array(
'id' => '1',
'name' => 'machin',
),
array(
'id' => '2',
'name' => 'chouette',
),
);
如何找到包含id
2(chouette)的數組的name
?
我是否需要對數組重新索引?
謝謝大家,顯然我被迫遍歷數組(我想避免的事情),我認為這是一些類似於Python的查找功能。 所以我想我將用id
重新編制索引。
只需找到包含要查找的ID的數組的索引即可。 SO對此主題有足夠的疑問和答案 。
假設您的真實應用程序中有一個包含大量數據的大型陣列,那么這可能會太慢(對您而言)。 在這種情況下,您確實需要修改數組的結構,因此可以更快地查找它,例如,通過使用id作為名稱的索引(如果您只對名稱感興趣)。
因為for循環是執行此操作的最佳方法,所以我建議更改數組以使id為數組索引。 例如:
$arr = array(
1 => 'machin',
2 => 'chouette',
);
這樣,您就可以得到調用$ arr [2]的名稱。 沒有循環並保持程序線性運行。
$name;
foreach ($arr as $value){
if ( $value['id'] == 2 ){
$name = $value['name'];
break;
}
}
我想說,重新編制信息索引可能非常有幫助。 如果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'];
}
}
這取決於您打算如何處理數組;-)
有點粗糙,但這會為您起名...
$name = false;
foreach($arr as $v) {
if($v['id'] == '2') {
$name = $v['name'];
break;
}
}
echo $name;
因此,不,您沒有被迫為數組重新索引,但這會使事情變得容易。
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.