php array_diff с до и после массива

кто-то знает функцию, как получить до и после вещей из array_diff.

var_dump(array_diff(['a' => 'b', 'c' => 'x'], ['a' => 'c', 'c' => 'x']));

Результат

array(1) {
'a' =>
string(1) "b"}

И я хочу что-то вроде

array(2) {
[0] =>
array(1) {
'a' =>
string(1) "b"}
[1] =>
array(1) {
'a' =>
string(1) "c"}
}

Есть ли функция для этого или у вас есть фрагмент для этого?

Заранее спасибо!

0

Решение

Попробуйте использовать array_diff_assoc — array_diff сравнивает только значения.

Вы могли бы сделать что-то вроде этого:

$arr1 = ['a' => 'b', 'c' => 'x'];
$arr2 = ['a' => 'c', 'c' => 'x'];

$diffs = [
array_diff_assoc($arr1, $arr2),
array_diff_assoc($arr2, $arr1)
];
0

Другие решения

Попробуйте это: вы можете различать там ключи, потому что после вашего массива есть ключи массивов

 $newArr = [
['a' => 'b', 'c' => 'x'],
['a' => 'c', 'c' => 'x']
];

$a = array_diff_assoc($newArr[0], $newArr[1]); //differentiate the 1st and 2nd keys
$b = array_diff_assoc($newArr[1], $newArr[0]); //differentiate the 2nd keys to the 1st keys
$diff = [$a, $b]; //then store the result to an array

echo '<pre>';
var_dump($diff);

Вот вывод:

 array(2) {
[0]=>
array(1) {
["a"]=>
string(1) "b"}
[1]=>
array(1) {
["a"]=>
string(1) "c"}
}

Или, если это массив массивов:

 //all keys are 0 and 1 because you're differentiate only two keys in one multi-dimensional array

$arr2= [
0 => [
['a' => 'b', 'c' => 'x'],
['a' => 'c', 'c' => 'x']
],
1 => [
['d' => 'e', 'c' => 'y'],
['d' => 'b', 'c' => 'y']
]
];

foreach($arr2 as $key => $val){
$a[] = array_diff_assoc($val[0], $val[1]);
$b[] = array_diff_assoc($val[1], $val[0]);
}
var_dump($diff);

Выход:

array(2) {
[0]=>
array(2) {
[0]=>
array(1) {
["a"]=>
string(1) "b"}
[1]=>
array(1) {
["d"]=>
string(1) "e"}
}
[1]=>
array(2) {
[0]=>
array(1) {
["a"]=>
string(1) "c"}
[1]=>
array(1) {
["d"]=>
string(1) "b"}
}
}
0

По вопросам рекламы [email protected]