首页 > 解决方案 > PHP - 多维数组检查重复项(没有 array_unique)

问题描述

更新

我为自己找到了这个问题的答案并发布了它,但我只能在两天内接受它..


我创建了这个多维数组:

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '05.03.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

该数组不应包含来自每个 ClientNumber 的重复 OrderDate。

我希望输出看起来像这样:

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '05.03.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

我应该使用什么 if 条件来使我的输出看起来像这样?任何帮助将不胜感激,谢谢!

这是我在 foreach 中调用的函数。我尽力检查 in_array 和 array_column 但输出看起来不像上面的代码。

$array = array();
function createArray($clientNr, $orderDate){
 if(empty($array)){ // if array is empty, just add
  $array[] = array(
              "OrderDate"=>$orderDate,
              "ClientNumber"=>$clientNr
                 );
 } else {
    if(??????)<--------------------------- // check here if date from clientnumber exists
      $array[] = array(
                   "OrderDate"=>$orderDate,
                   "ClientNumber"=>$clientNr
                  );
    }
 }
}

标签: phparraysif-statementmultidimensional-arrayduplicates

解决方案


我做的!感谢您的方法,但这两个对我不起作用:

array_unique($array, SORT_REGULAR);
array_map("unserialize", array_unique(array_map("serialize", $array)));

这是我的解决方案,我添加了一个唯一键并检查该键是否已存在。

$id = date("Ymd", strtotime($orderDate)).$clientNr; // creates unique key

if(!array_key_exists($id, $array)){ // check if this key exists and add if not

 $array[$id] = array(
              "OrderDate"=>$orderDate,
              "ClientNumber"=>$clientNr
             );
}

推荐阅读