23

我需要从重复的值中获取键。我尝试使用 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]);
4

6 回答 6

35

您想要带有搜索值的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]
    }

  }
}
于 2009-07-31T13:46:59.820 回答
12

array_search()我们可以阅读:

如果在 haystack 中多次找到 needle,则返回第一个匹配的键。要返回所有匹配值的键,请改用array_keys()可选search_value参数。

于 2009-07-31T13:46:11.617 回答
8

The following combination of function calls will give you all duplicate values:

$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
于 2009-07-31T14:31:09.147 回答
4

您可以array_search()通过使用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;
}

资料来源:罗伯塔克,php.net

于 2015-11-08T19:07:04.757 回答
2

PHP 手册在函数文档的Return Value部分中array_search()说明了可用于array_keys()完成此操作的部分。您只需要提供第二个参数:

$keys = array_keys($list[0], "2009-09-09");
于 2009-07-31T13:49:25.077 回答
0
$userdb=Array
(
    (0) => Array
        (
            (uid) => '100',
            (name) => 'Sandra Shush',
            (url) => 'urlof100'
        ),
);

$key = array_search(100, array_column($userdb, 'uid'));
于 2021-06-19T11:10:15.740 回答