【问题标题】:search multi-dimentional array for matching elements在多维数组中搜索匹配元素
【发布时间】:2019-09-11 13:07:58
【问题描述】:

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

这是我的数组:

$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']; "

}

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

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

例如,一旦数组曾经运行过它的迭代,就需要将其删除,以便下一个数组不会对其进行比较。

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

如果我理解了这个问题,你想返回数组中多次出现的日期吗?

您可以通过计算所有特征不止一次(array_count_values() https://www.php.net/manual/en/function.array-count-values.php 与 array_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);

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多