PHP - 如何比较两个数组并删除重复值区分大小写
问题描述:
我有2个数据阵列,我想比较并删除重复项。我有一个MasterArray和一个CompareArray。我想删除MasterArray中的所有重复项。我有这种工作,但它目前区分大小写,我需要删除。这是我挣扎的地方。PHP - 如何比较两个数组并删除重复值区分大小写
“项目C”和“e”不应该在列表中,因为如果它不区分大小写,它就会相等。
$MasterArray = array("Item A", "ITEM B", "ITEM C", "d", "E");
$CompareArray = array("Item A", "B", "item c", "d", "e");
$UniqueArray = array_unique(array_merge($MasterArray, $CompareArray));
$MasterArray = array_diff($UniqueArray, $MasterArray);
print_r($MasterArray); exit;
答
首先将所有的数值为小写(或大写,这取决于你的需要):
$MasterArray = array_map('strtolower', $MasterArray);
$CompareArray = array_map('strtolower', $CompareArray);
那么你可以做的比较:
$UniqueArray = array_unique(array_merge($MasterArray, $CompareArray));
$MasterArray = array_diff($UniqueArray, $MasterArray);
print_r($MasterArray);
答
array_udiff + strcasecmp; )
$MasterArray = array("Item A", "ITEM B", "ITEM C", "d", "E");
$CompareArray = array("Item A", "B", "item c", "d", "e");
print_r(array_udiff($MasterArray, $CompareArray, 'strcasecmp'));
答
您可以使用新阵列编写自己的功能$ items来存储唯一值和$ dups来存储重复项。然后,你所要做的就是从$ items中消除$ dups并返回它的值。
对于这种情况,您可以使用以下功能removedups。
function removedups ($MasterArray, $CompareArray) {
$items = array();
$dups = array();
$MasterArray = array_merge($MasterArray, $CompareArray);
foreach ($MasterArray as $item) {
$lowercased_item = strtolower($item);
if (isset($items[$lowercased_item])) {
unset($items[$lowercased_item]);
$dups[] = $lowercased_item;
}
elseif (!in_array($lowercased_item,$dups)) {
$items[$lowercased_item] = $item;
}
}
return array_values($items);
}
$MasterArray = array("Item A", "ITEM B", "ITEM C", "d", "E");
$CompareArray = array("Item A", "B", "item c", "d", "e");
$MasterArray = removedups($MasterArray, $CompareArray);
print_r($MasterArray); exit
我知道我可以改变这种情况,但我需要把它们写回数据库,所以我需要它们在原来的情况下。 – user1315422