如果有人能在这里帮助我,我将永远感激,因为我花了大约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()然后当我循环遍历生成用户可以选择的字段的数组时会导致问题。
请帮忙。我会给你买很多啤酒! :)
谢谢, 史蒂夫
答案 0 :(得分:2)
我不知道如何使用任何内置的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
)
)
*/