【问题标题】:PHP remove duplicate multi-dimensional arrayPHP删除重复的多维数组
【发布时间】:2016-11-18 21:18:33
【问题描述】:

这是我将用于过滤的输入数组。

[TESTING] => Array
    (
        [0] => Array
            (
                [a] => false
                [b] => WCP
                [c] => Title A
            )

        [1] => Array
            (
                [a] => false
                [b] => WCP
                [c] => Title B
            )

        [2] => Array
            (
                [a] => false
                [b] => WCP
                [c] => Title C
            )

    )

我想删除同时具有的重复记录:键 [a] 和 [b] 具有相同的值。我不想使用 [c] 作为删除重复记录的条件。这种情况下的输出应该是。

[TESTING] => Array
    (
    )

因为所有 3 个子数组的键 [a] 和键 [b] 的值都相同。我使用了array_unique(),但此函数使用所有 3 个 [a]、[b] 和 [c] 作为删除我不想要的重复记录的条件。我没有得到我想要的输出。

需要帮助。有什么建议或想法吗?

【问题讨论】:

  • array_unique 将事物作为一个整体进行比较。你不能告诉它忽略你正在比较的组件。你必须自己拼凑一些东西,例如array_walk().
  • 什么输出数组?

标签: php arrays multidimensional-array foreach duplicates


【解决方案1】:

如果您发现它有用,这里是您的问题的解决方案:-

<?php $a = array(
        0 => array(
                "a" => false,
                "b" => "WCP",
                "c" => "Title A"
            ),
        1 => array(
                "a" => false,
                "b" => "WCP",
                "c" => "Title B"
            ),
            2 => array(
                "a" => false,
                "b" => "WCP",
                "c" => "Title C"
            )
        );
global $checkArray;
$checkArray = $a;
function array_remove($a){
  global $checkArray;
  $arrLen = count($checkArray);
  unset($a['c']);
  foreach ($checkArray as $key => $value) {
    $diff = array_diff($value, $a);
    if (1 != count($diff) ||  !array_key_exists('c', $diff)){
      return true;
    }
  }
  return false;
}
print_r(array_filter($a, "array_remove"));

【讨论】:

  • @DanielDucTrinh 哦谢谢,如果它解决了您的问题,可以接受它作为答案
【解决方案2】:

PHP 中的数组函数主要是为二维数组设计的。您将需要遍历多维数组,对键值进行比较,然后将正确的结果分配给保存数组。持有数组需要一个允许通过多维数组的上层进行多次迭代的范围。这可以作为与 array_filter 一起使用的函数来完成;或者,通过独立重新分配来完成。

【讨论】:

  • 谢谢...我正在尝试做的事情
【解决方案3】:

试试这个,

function clearDuplicates($array)
{
   $new_array=array();

    for($i=0;$i<count($array);$i++)
    {
        $x=false;
        for($j=0;$j<count($array);$j++)
        if($j!=$i)
            if($array[$i]["a"]==$array[$j]["a"] && $array[$i]["b"]==$array[$j]["b"])
                $x=true;

        if(!$x)
            $new_array[]=$array[$i];
     }  

    return new_array;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2011-04-05
    • 2023-03-27
    • 2019-09-04
    • 2012-05-05
    • 2017-01-01
    • 2021-06-23
    相关资源
    最近更新 更多