簡體   English   中英

如何在PHP中一次通過多個值搜索多維數組?

[英]How to search a multi-dimensional array by multiple values at once in PHP?

給定以下二維數組:

$data_info_array = array( 
array( 
    'score'   => '100', 
    'name'    => 'Alice', 
    'subject' => 'Data Structures'
), 
array( 
    'score'   => '50', 
    'name'    => 'Bob', 
    'subject' => 'Advanced Algorithms'
), 
array( 
    'score'   => '75', 
    'name'    => 'Charlie', 
    'subject' => 'Distributed Computing'
) 
); 

// this gets the key when I search for the score of 50 from one column
$index = array_search('50', array_column($data_info_array, 'score')); 
echo $index; 

如果我想按兩個值進行搜索,我只能想到以下內容:

 $index1 = array_search('50', array_column($data_info_array, 'score')); 
 $index2 = array_search('Bob', array_column($data_info_array, 'name')); 
 $real_index = ( $index1 === $index2 ) ? $index1 : null; 

有沒有辦法我可以一起搜索“50”的分數和“鮑勃”的名字,並且只有當該組合存在時才能獲得索引? 有沒有比我想出的更好的方法呢?

您可以將搜索查詢構建為一個數組,並將每個項目與其的交集進行比較。

$search = ['score' => '50', 'name' => 'Bob'];

foreach($data_info_array as $k => $v) {
    if ( $search === array_intersect($v, $search) ) {
        echo $k;
        break;
    }
}

@mickmackusa 注意到在這里使用array_intersect_assoc()更安全。 他是對的,因為當多維數組項不可預測時,沒有什么禁止這樣的項:

['miaou' => '50', 'graou' => 'Bob', 'score' => '50', 'name' => 'Bob']

除了其他鍵之外,搜索值也存在。 在這種情況下, array_intersect()返回所有正確的值(當然還有它們對應的鍵),而不管$search的鍵是什么,並且與搜索數組的比較將返回false

但是使用array_intersect_assoc() ,您可以確保只考慮$search中鍵的值。

結論:如果你讓自己通過多維數組的項目看似單調地哄騙進入睡眠,你將不會被免疫的驚喜時,意想不到的變化所引起的。

您可以使用array_filter() ,它允許您同時根據需要對內容進行盡可能多的檢查...

$output = array_filter($data_info_array, function ($data) {
    return $data['score'] == 50 && $data['name'] == 'Bob';
});

這將為您提供匹配列表,因此如果您需要單個匹配,您可能需要執行[0] (並檢查是否僅返回 1)。

這是一個很好的單行代碼,利用 PHP 箭頭函數

$name = "Alice";
$score = "100";

$result = array_filter($data_info_array, fn($data) => $data['name'] == $name && $data['score'] == $score );

print_r($result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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