Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中搜索数组中的多个值?_Php_Arrays_Search_Duplicates_Key - Fatal编程技术网

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

如何在PHP中搜索数组中的多个值?,php,arrays,search,duplicates,key,Php,Arrays,Search,Duplicates,Key,我需要从重复的值中获取键。我尝试使用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";

我需要从重复的值中获取键。我尝试使用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]);
在这方面,我们可以阅读:

如果在干草堆里发现了针更多 不止一次,第一个匹配的密钥是 返回。为所有人归还钥匙 匹配值,与一起使用 可选的
search\u值
参数 相反

您需要使用搜索值

array_keys($list[0], "2009-09-09");
它将返回具有指定值的键数组,在您的例子中为[0,2]。如果您还想找到重复的,您可以首先通过,然后在原始数组上使用array_键迭代该数组;返回长度大于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]
    }

  }
}

PHP手册在中说明了可用于完成此任务的方法。您只需提供第二个参数:

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

以下函数调用组合将为您提供所有重复值:

$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

您可以通过使用
while
循环和以下解决方法来实现这一点:

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

对于一个多维数组,您可以使用以下函数来实现(作为替代):


来源:

谢谢!我复制粘贴了第一行代码。它的工作原理与预期的一样。数组密钥将更有帮助。数组如下(0=>(学生id=>10215,卷号=>23),1=>(……)如何搜索卷号为23的密钥的学生id。
function array_isearch($str, $array){
  $found = array();
  foreach ($array as $k => $v) {
    if (strtolower($v) == strtolower($str)) {
      $found[] = $k;
    }
  }
  return $found;
}