кто-то знает функцию, как получить до и после вещей из 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"}
}
Есть ли функция для этого или у вас есть фрагмент для этого?
Заранее спасибо!
Попробуйте использовать 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)
];
Попробуйте это: вы можете различать там ключи, потому что после вашего массива есть ключи массивов
$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"}
}
}