How to search Array for multiple values in PHP?

后端 未结 5 1224
滥情空心
滥情空心 2020-12-03 13:58

I need to get the keys from values that are duplicates. I tried to use array_search and that worked fine, BUT I only got the first value as a hit.

I need to get both

相关标签:
5条回答
  • 2020-12-03 14:08

    You can achieve that using array_search() by using while loop and the following workaround:

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

    Source: cue at openxbox at php.net

    For one-multidimensional array, you may use the following function to achieve that (as alternative to array_keys()):

    function array_isearch($str, $array){
      $found = array();
      foreach ($array as $k => $v) {
        if (strtolower($v) == strtolower($str)) {
          $found[] = $k;
        }
      }
      return $found;
    }
    

    Source: robertark, php.net

    0 讨论(0)
  • 2020-12-03 14:08

    The PHP manual states in the Return Value section of the array_search() function documentation that you can use array_keys() to accomplish this. You just need to provide the second parameter:

    $keys = array_keys($list[0], "2009-09-09");
    
    0 讨论(0)
  • 2020-12-03 14:09

    You want array_keys with the search value

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

    which will return an array of the keys with the specified value, in your case [0, 2]. If you want to find the duplicates as well, you can first make a pass with array_unique, then iterate over that array using array_keys on the original; anything which returns an array of length > 1 is a duplicate, and the result is the keys in which the duplicates are stored. Something like...

    $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 讨论(0)
  • 2020-12-03 14:10

    In array_search() we can read:

    If needle is found in haystack more than once, the first matching key is returned. To return the keys for all matching values, use array_keys() with the optional search_value parameter instead.

    0 讨论(0)
  • 2020-12-03 14:16

    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
    
    0 讨论(0)
提交回复
热议问题