Различие между двумя arrays php?

У меня есть два arrays: A1 и B1.

Как я делаю, чтобы сравнивать их и находить те реестры первого array, у которых есть какое-то различие относительно второго?

$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"
    )
);
4
задан 29.01.2016, 22:40
3 ответа

Не, если уже ты попытался с array_diff, но более или менее это может стоить тебе для того, чтобы экспериментировать:

<?PHP

$t = count($a1);

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

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

     print_r($resultado);

 }

?>
3
ответ дан 24.11.2019, 14:56
  • 1
    @Edgar Конрадо: Я это протестировал с примером и мной функция и # 243; Возвратись: Array ( [ID] => M2 [Valor] => 200 [Nombre] => BONI ) Array ( [ID] => M1 [Valor] => 100 [Nombre] => SUELDO ). Если я спутан, я прошу тебя объясняться. Привет. –  Eduardo Munizaga 10.02.2016, 14:12

Поскольку у тебя есть ассоциативный array array_diff_uassoc, что вычисляет различие между arrays с добавочной проверкой Г-ndices, который осуществляется одной funciГіn devoluciГіn вызова, обеспеченного пользователем. Я оставляю cГіdigo примера

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

//----------------------------результат Array ([b] => brown [c] => blue [0] => сеть)

2
ответ дан 24.11.2019, 14:56

Ввиду того, что ты используешь мультипространственную договоренность, ты занимаешь перекурсивной функции для власти сравни их:

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));
1
ответ дан 24.11.2019, 14:56
  • 1
    В этом soluci и # 243; n считается, что порядок имеет значение (OP не especific и # 243; на этом), он не возвращает полный реестр а s и # 243; это поля, которые меняются, и не удайся, если - в и # 241; adido новые поля во втором array –  Alvaro Montoro♦ 10.02.2016, 06:17