在多维数组中搜索匹配元素

时间:2019-09-11 13:07:58

标签: php arrays multidimensional-array

我有一个多维数组。我需要搜索数组并检索彼此匹配的日期实例。

这是我的数组:

$dateArray = array(8) {
  [0]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "1"
    ["event_date"]=>
    string(10) "2019-09-11"

  }
  [1]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "1"
    ["event_date"]=>
    string(10) "2019-09-11"
  }
  [2]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "4"
    ["event_date"]=>
    string(10) "2019-10-17"
  }
  [3]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "4"
    ["event_date"]=>
    string(10) "2019-10-17"

  }
  [4]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "3"
    ["event_date"]=>
    string(10) "2020-09-15"

  }
  [5]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "3"
    ["event_date"]=>
    string(10) "2020-09-15"
  }
  [6]=>
  array(15) {
    ["bookable_id"]=>
    string(1) "2"
    ["event_date"]=>
    string(10) "2021-09-09"
  }
}

这是我的功能:

function searchMatchingDates($compare, $array)
    {
        foreach ($array as  $val) {
            if ($compare["event_date"]== $val["event_date"]){
                return $val;
            }
        }
        return null;

这就是我的搜索方式:

foreach ($dateArray as $compare) {

 $match  = searchMatchingDates($compare, $array); 

}

if($match){

echo "$compare['bookable_id'] + $match['bookable_id']; "

}

这有效并返回日期。但是它将返回重复的日期,因为数组将比较两次。

一旦数组被比较过一次,我需要一种删除数组的方法。

例如,一旦数组运行了迭代,则需要将其删除,以便下一个数组不对其进行比较。

1 个答案:

答案 0 :(得分:0)

如果我理解这个问题,您想返回数组中包含多个特征的日期吗?

您可以通过对所有具有多个特征的元素(array_count_values() https://www.php.net/manual/en/function.array-count-values.phparray_column()进行组合)进行计数,然后根据结果过滤数组。

// get dates which feature more than once
$dateCounts = array_filter(
    array_count_values(array_column($dateArray, 'event_date')),
    function ($count) {
        return $count > 1;
    }
);

// filter those matching dates
$matching = array_filter($dateArray, function ($date) use ($dateCounts) {
    return isset($dateCounts[$date['event_date']]);
});

var_dump($matching);