簡體   English   中英

php-查找鍵具有給定值的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM