如何在PHP中搜索Array中的多个值?

时间:2009-07-31 13:42:19

标签: php arrays search duplicates key

我需要从重复的值中获取密钥。我尝试使用array_search并且工作正常,但我只得到第一个值作为命中。

我需要从重复值中获取两个键,在本例中为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]);

6 个答案:

答案 0 :(得分:27)

您希望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]
    }

  }
}

答案 1 :(得分:10)

array_search()中,我们可以阅读:

  

如果在干草堆中发现针头更多   不止一次,第一个匹配的关键是   回。为所有人返回密钥   匹配值,使用array_keys()   可选的search_value参数   代替。

答案 2 :(得分: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

答案 3 :(得分:3)

您可以使用while循环使用array_search()实现此目的,并采用以下解决方法:

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

答案 4 :(得分:2)

PHP手册在Return Value section of the array_search() function documentation中说明您可以使用array_keys()来完成此任务。您只需要提供第二个参数:

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

答案 5 :(得分:0)

$userdb=Array
(
    (0) => Array
        (
            (uid) => '100',
            (name) => 'Sandra Shush',
            (url) => 'urlof100'
        ),
);

$key = array_search(100, array_column($userdb, 'uid'));