2009-07-31 88 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