【问题标题】:PHP Multidimensional Arrays - Remove DuplicatesPHP 多维数组 - 删除重复项
【发布时间】:2013-06-07 20:50:59
【问题描述】:

如果有人可以在这里帮助我,我将永远感激不尽,因为我现在已经花了大约 2 天的时间试图让它发挥作用。我想取两个多维数组并比较它们,然后删除任何重复的记录。

场景是:array2 中的值已经分配给用户的配置文件。 array1 中的值是用户可以选择的所有可用值。我想比较这两者,以便只给出尚未分配的选项(留在数组中)...

$array1 = array(
  [0] => array( [id] => 3 [name] => Eye Colour )
  [1] => array( [id] => 1 [name] => Hair Colour )
  [2] => array( [id] => 5 [name] => Hair Length )
  [3] => array( [id] => 4 [name] => Height )
); 

$array2 = array(
  [0] => array( [attribute_id] => 3 [name] => Eye Colour [active] => 1 )
  [1] => array( [attribute_id] => 5 [name] => Hair Length [active] => 1 ) )
);

PHP 的 array_diff() 函数不适用于多维数组,我进行了很好的搜索,但似乎找不到任何适合我的东西!

基于以上两个数组的结果应该是:

$array1 = array(
  [0] => array( [id] => 1 [name] => Hair Colour )
  [1] => array( [id] => 4 [name] => Height )
);

[active] 字段无关紧要,所以我只需要它来比较 ID 和 Name 字段。我意识到这两个 id 字段的名称不同,但是由于它们是数据库列名称,因此更改它们会很痛苦。

它需要完全删除数组,而不仅仅是值。我在之前的尝试中遇到了问题,它把 array() 留在了那里,然后当我循环遍历生成用户可以选择的字段的数组时,这会导致问题。

请帮忙。我要给你买很多啤酒! :)

谢谢, 史蒂夫

【问题讨论】:

    标签: php arrays array-difference


    【解决方案1】:

    我不知道如何使用任何内置的 PHP 函数,但这里有一个自定义函数:

    $array1 = array(
      array( 'id' => 3, 'name' => 'Eye Colour' ),
      array( 'id' => 1, 'name' => 'Hair Colour' ),
      array( 'id' => 5, 'name' => 'Hair Length' ),
      array( 'id' => 4, 'name' => 'Height' ),
    ); 
    
    $array2 = array(
      array( 'attribute_id' => 3, 'name' => 'Eye Colour', 'active' => 1 ),
      array( 'attribute_id' => 5, 'name' => 'Hair Length', 'active' => 1 )
    );
    
    // function to remove duplicates
    function myArrayDiff($array1, $array2) {
        // loop through each item on the first array
        foreach ($array1 as $key => $row) {
            // loop through array 2 and compare
            foreach ($array2 as $key2 => $row2) {
                if ($row['id'] == $row2['attribute_id']) {
                    // if we found a match unset and break out of the loop
                    unset($array1[$key]);
                    break;
                }
            }
        }
    
        return array_values($array1);
    }
    
    $array3 = myArrayDiff($array1, $array2);
    
    print_r($array3);
    
    /* result:
        Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Hair Colour
                )
    
            [1] => Array
                (
                    [id] => 4
                    [name] => Height
                )
    
        )
    */
    

    【讨论】:

    • 嗨,克里斯,非常感谢你抽出宝贵的时间来写这篇文章——它工作得很好,正是我所需要的。我不确定是否有更有效的方法?我只是知道它将在 $array2 中循环多次,当用户群很大时,这可能会有点滞后。不过,我非常感谢您的时间和专业知识。非常感谢,史蒂夫
    • 谢谢!这里是凌晨 1 点,之后有数千行代码,您的解决方案是唯一真正做到了它应该做的并且有很好评论的解决方案!
    猜你喜欢
    • 2023-03-27
    • 2016-11-18
    • 2017-07-23
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2021-05-01
    • 2018-07-26
    相关资源
    最近更新 更多