PHP多维数组-删除重复项


PHP Multidimensional Arrays - Remove Duplicates

如果有人能在这里帮助我,我将永远感激,因为我已经花了大约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函数但这里有一个自定义函数:

$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
            )
    )
*/