2016-09-30 104 views
0

我有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; 

回答

0

首先将所有的数值为小写(或大写,这取决于你的需要):

$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); 
+0

我知道我可以改变这种情况,但我需要把它们写回数据库,所以我需要它们在原来的情况下。 – user1315422

0

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')); 
0

您可以使用新阵列编写自己的功能$ 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 
相关问题