Difference between two php arrays?

3

I have two arrays: A1 and B1 .

How do I compare them and find those records in the first array that have some difference from the second?

$a1 = Array
    (
    "0" => Array
        (
        "Empresa" => "HHH",
        "Paga" => "13/01/2015",
        "ID" => "M2",
        "Valor" => "200",
        "Nombre" => "BONI"
    ),
    "1" => Array
        (
        "Empresa" => "HHH",
        "Paga" => "13/01/2015",
        "ID" => "M1",
        "Valor" => "100",
        "Nombre" => "SUELDO"
    )
);

$b1 = Array
    (
    "0" => Array
        (
        "Empresa" => "HHH",
        "Paga" => "13/01/2015",
        "ID" => "M1",
        "Valor" => "100",
        "Nombre" => "SUELDO"
    ),
    "1" => Array
        (
        "Empresa" => "HHH",
        "Paga" => "13/01/2015",
        "ID" => "M2",
        "Valor" => "200",
        "Nombre" => "BONI"
    )
);
    
asked by Jonny Alexander 29.01.2016 в 21:12
source

3 answers

3

I do not know if you already tried with array_diff, but more or less this can be useful for you to experiment:

<?PHP

$t = count($a1);

 for ($x=0;$x<$t; $x++){

     $resultado = array_diff($a1[$x], $b1[$x]);

     print_r($resultado);

 }

?>
    
answered by 29.01.2016 в 23:53
1

As you have an associative array array_diff_uassoc that calculates the difference between arrays with an additional index check that is performed by a callback function supplied by the user. I leave sample code

<?php
function key_compare_func($a, $b)
{
if ($a === $b) {
    return 0;
}
return ($a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>

// ---------------------------- result         Array         (            [b] = > brown            [c] = > blue            [0] = > net          )

    
answered by 09.02.2016 в 19:32
1

Since you are using a multidimensional array, you use a recursive function to compare them:

function array_diff_assoc_recursive($array1, $array2)
    {
        foreach($array1 as $key => $value)
        {
            if(is_array($value))
            {
                if(!isset($array2[$key]))
                {
                    $difference[$key] = $value;
                }
                elseif(!is_array($array2[$key]))
                {
                    $difference[$key] = $value;
                }
                else
                {
                    $new_diff = array_diff_assoc_recursive($value, $array2[$key]);
                    if($new_diff != FALSE)
                    {
                        $difference[$key] = $new_diff;
                    }
                }
            }
            elseif(!isset($array2[$key]) || $array2[$key] != $value)
            {
                $difference[$key] = $value;
            }
        }
        return !isset($difference) ? 0 : $difference;
    }

    $a1 = Array
        (
        "0" => Array
        (
            "Empresa" => "HHH",
            "Paga" => "13/01/2015",
            "ID" => "M2",
            "Valor" => "200",
            "Nombre" => "BONI"
        ),
        "1" => Array
        (
            "Empresa" => "HHH",
            "Paga" => "13/01/2015",
            "ID" => "M1",
            "Valor" => "100",
            "Nombre" => "SUELDO"
        )
    );
    $b1 = Array
        (
        "0" => Array
        (
            "Empresa" => "HHH",
            "Paga" => "13/01/2015",
            "ID" => "M1",
            "Valor" => "100",
            "Nombre" => "SUELDO"
        ),
        "1" => Array
        (
            "Empresa" => "HHH",
            "Paga" => "13/01/2015",
            "ID" => "M2",
            "Valor" => "200",
            "Nombre" => "BONI"
        )
    );

    print_r(array_diff_assoc_recursive($a1, $b1));
    
answered by 10.02.2016 в 04:10