2009-07-31 91 views
18

我需要從重複值中獲取密鑰。我試圖使用array_search並且工作正常,但是我只有第一個值作爲命中。如何在PHP中搜索Array中的多個值?

我需要從重複值中獲取兩個鍵,在這種情況下爲0和2.搜索結果以數組形式輸出會很好。

有沒有一個PHP函數來做到這一點,或者我需要寫一些多重循環來做到這一點?

$list[0][0] = "2009-09-09"; 
$list[0][1] = "2009-05-05"; 
$list[0][2] = "2009-09-09"; 
$list[1][0] = "first-paid"; 
$list[1][1] = "1"; 
$list[1][2] = "last-unpaid"; 

echo array_search("2009-09-09",$list[0]); 

回答

25

你想array_keys與搜索值

array_keys($list[0], "2009-09-09"); 

這將返回與指定值的鍵的陣列,你的情況[0,2]。如果你也想找到重複項,你可以先用array_unique進行傳遞,然後在原始數組上使用array_keys迭代該數組;返回長度> 1的數組的任何東西都是重複的,結果是存儲重複項的鍵。喜歡的東西...

$uniqueKeys = array_unique($list[0]) 

foreach ($uniqueKeys as $uniqueKey) 
{ 
    $v = array_keys($list[0], $uniqueKey); 

    if (count($v) > 1) 
    { 
    foreach ($v as $key) 
    { 
     // Work with $list[0][$key] 
    } 

    } 
} 
+0

謝謝!我複製粘貼的第一行代碼。它像預期的那樣工作。 – 2009-07-31 18:55:45

8

array_search(),我們可以讀到:

如果在草垛不止一次 發現針,第一個匹配的關鍵是 返回。要返回所有 匹配值的密鑰,請使用array_keys()和 ,而不是使用可選的search_value參數 。

+0

陣列是這樣的(0 = >(student_id => 10215,roll_no => 23),1 =>(......))如何搜索具有卷號的密鑰的student_id。 23. – 2017-02-28 04:17:25

7

的函數調用下面的組合會給你所有重複的值:

$a = array(1, 1, 2, 3, 4, 5, 99, 2, 5, 2); 

$unique  = array_unique($a); // preserves keys 
$diffkeys = array_diff_key($a, $unique); 
$duplicates = array_unique($diffkeys); 

echo 'Duplicates: ' . join(' ', $duplicates) . "\n"; // 1 2 5 
2

可以實現,使用​​使用while環路和下面的解決方法:

while (($key = array_search("2009-09-09", $list[0])) !== FALSE) { 
    print($key); 
    unset($list[0][$key]); 
} 

來源:cue at openxbox at php.net

對於一多維陣列,則可以使用下面的函數來實現這一(作爲替代array_keys()):

function array_isearch($str, $array){ 
    $found = array(); 
    foreach ($array as $k => $v) { 
    if (strtolower($v) == strtolower($str)) { 
     $found[] = $k; 
    } 
    } 
    return $found; 
} 

來源:robertark, php.net