找到两个数组之间的添加或删除值

时间:2014-07-29 08:22:15

标签: php arrays

我为同步两个数组写了一个代码,知道哪个是必须删除的,哪个是添加到新数组。

<?php
$currentArray = array('ali', 'hasan', 'husein'); //base array read from database
$saveArray = array('husein', 'Hasan', 'taghi'); //requested item for save/delete in database
$deleteArray = array();
$addArray = array();

$currentArray = array_map('strtolower', $currentArray);
$saveArray = array_map('strtolower', $saveArray);

foreach ($currentArray as $a) {
    if (!in_array($a, $saveArray))
        $deleteArray[] = $a;
}

foreach ($saveArray as $a) {
    if (!in_array($a, $currentArray))
        $addArray[] = $a;
}

echo 'must be deleted:';
var_dump($deleteArray);

echo 'must be added:';
var_dump($addArray);

?>

输出:

must be deleted:

array
  0 => string 'ali' (length=3)

must be added:

array
  0 => string 'taghi' (length=5)

现在,您是否认为此操作的代码更好,更快,更简单?

2 个答案:

答案 0 :(得分:5)

您可以使用array_udiff()作为回调函数使用strcasecmp()

$currentArray = array('ali', 'hasan', 'husein');
$saveArray = array('husein', 'Hasan', 'taghi');

$deleteArray = array_udiff($currentArray, $saveArray, 'strcasecmp');

$addArray = array_udiff($saveArray, $currentArray, 'strcasecmp');

See demo

答案 1 :(得分:2)

值必须相同。

$currentArray = array_map('strtolower', $currentArray);
$saveArray = array_map('strtolower', $saveArray);

基本上使用使用Array diff。

$deleteArray = array_diff($currentArray, $saveArray);
$addArray = array_diff($saveArray, $currentArray);