1
次のコードは、最初の配列(parameter1)を2番目の配列(parameter2)と比較し、どの要素が変更されたかを示す配列を返します。配列の差が編集された値を返す
$array_data = array(
"studDetails" => array(
"studDet" => array(
"studClass" => "V",
),
),
"email" => "[email protected]",
"systemNames" => array("EMR"),
);
$array_edited = $array_data;
//EDITING
$array_edited['email'] = "kam";
$array_edited['studDetails']['studDet']['studClass'] = "VV";
echo "<pre>";
print_r(array_diff_assoc2_deep($array_edited, $array_data));
function array_diff_assoc2_deep($array_edited, $array_data)
{
$difference = array();
foreach ($array_edited as $row => $value) {
if (!isset($array_data[$row]) && !empty($value)) {
$difference['added'][$row] = $value;
} else if (is_array($array_edited[$row]) && is_array($array_data[$row])) {
$difference[$row] = array_diff_assoc2_deep($array_edited[$row], $array_data[$row]);
} else if ((string)$value != (string)$array_data[$row]) {
$difference['edited'][$row] = array("old" => $array_data[$row], "new" => $value);
}
}
$difference = array_filter($difference);
return $difference;
}
OUTPUT:
Array (
[studDetails] => Array (
[studDet] => Array (
[edited] => Array (
[studClass] => Array (
[old] => V
[new] => VV
)
)
)
)
[edited] => Array (
[email] => Array (
[old] => [email protected]
[new] => kam
)
)
)
私は、出力は関係なく、内部の配列があるどのように多くの単一編集したキーにならないようにしたいです。
所望の出力:
Array (
[edited] => Array (
[email] => Array (
[old] => [email protected]
[new] => kam
)
[studClass] => Array (
[old] => V
[new] => VV
)
)
)