【问题标题】:How to search Array for multiple values in PHP?如何在 PHP 中搜索数组中的多个值?
【发布时间】:2010-11-15 19:18:13
【问题描述】:

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

【问题讨论】:

    标签: php arrays search duplicates key


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我复制粘贴了第一行代码。它按预期工作。
    • array_keys 会更多帮助起来
    【解决方案2】:

    array_search()我们可以阅读:

    如果在大海捞针中找到更多 不止一次,第一个匹配键是 回来。归还所有人的钥匙 匹配值,使用 array_keys() 和 可选的search_value 参数 而是。

    【讨论】:

    • 一个数组是这样的 (0 =>(student_id=>10215, roll_no => 23), 1 =>(......)) 如何搜索key的student_id有一个卷号。 23.
    【解决方案3】:

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

    $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
    

    【讨论】:

      【解决方案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;
      }
      

      来源:robertark, php.net

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:
          $userdb=Array
          (
              (0) => Array
                  (
                      (uid) => '100',
                      (name) => 'Sandra Shush',
                      (url) => 'urlof100'
                  ),
          );
          
          $key = array_search(100, array_column($userdb, 'uid'));
          

          【讨论】:

          • 请添加一些解释。
          猜你喜欢
          • 2012-12-05
          • 2011-05-20
          • 2017-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-05
          • 2019-10-29
          • 1970-01-01
          相关资源
          最近更新 更多