- LaravelのCollectionに多次元配列を比較する万能な機能を求め調べてみたのですが、特になかったので、
phpの配列の多次元配列の差分を見る方法を探しました。
下記のfunctionを用いて、差分を出してみてください。
public static function array_diff_assoc_recursive($array1, $array2)
{
$difference=array();
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!isset($array2[$key]) || !is_array($array2[$key])) {
$difference[$key] = $value;
} else {
$new_diff = self::array_diff_assoc_recursive($value, $array2[$key]);
if (!empty($new_diff)) {
$difference[$key] = $new_diff;
}
}
} elseif (!array_key_exists($key, $array2) || $array2[$key] !== $value) {
$difference[$key] = $value;
}
}
return $difference;
}
<?php
$a1=array( 'a' => 0, 'b' => null, 'c' => array( 'd' => null ) );
$a2=array( 'a' => 0, 'b' => null );
var_dump( array_diff_assoc_recursive( $a1, $a2 ) );
var_dump( chinello_array_diff_assoc_recursive( $a1, $a2 ) );
?>
array(1) {
["c"]=>
array(1) {
["d"]=>
NULL
}
}
array(2) {
["b"]=>
NULL
["c"]=>
array(1) {
["d"]=>
NULL
}
}