Nabi K.A.Z.
Nabi K.A.Z.

Reputation: 10714

find add or delete values between two array

I write a code for sync two array and know which was must delete and which was add to new array.

<?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);

?>

Output:

must be deleted:

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

must be added:

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

Now, Do you thinks is it better, faster and simpler code for this action?

Upvotes: 1

Views: 103

Answers (2)

Mark Miller
Mark Miller

Reputation: 7447

You can use array_udiff() for this, using strcasecmp() as the callback function.

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

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

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

See demo

Upvotes: 5

m1k1o
m1k1o

Reputation: 2364

The values must be the same.

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

And basically use use Array diff.

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

Upvotes: 2

Related Questions