$initial
初期データ配列( )と変更データ配列( )の2つの配列を持つスクリプトがありますが$modified
、配列間の違いを検出する際に問題が発生しました。どの値が追加されたか(キーはそれらの間で異なります)、どの値が削除されたかを判別し、後で変更を2つの配列に配置する必要があります($dataAdded
および$dataRemoved
)。
これを行うために利用できる機能はありますか、そうでない場合は、私が従うことができる概念はありますか?
array_diff()はそれを行うことができます。
<?php
$initial = array(1,2,3,4,5,6,7,8);
$modified = foo($initial);
$removed = array_diff($initial, $modified);
$added = array_diff($modified, $initial);
echo 'removed=', join(', ', $removed), "\n";
echo 'added=', join(', ', $added), "\n";
function foo($a) {
// "removing" all odd numbers
// and "adding" 10,12,14,16
return array_map(function($e) { return $e*2; }, $a);
}
プリント
removed=1, 3, 5, 7
added=10, 12, 14, 16
私は質問をキャンセルするつもりでしたが、同様の問題を抱えている他の人に役立つかもしれないと感じました。
私は以下を使用しました:
$dataAdded = array();
$dataRemoved = array();
foreach ($modified as $data) {
if (!in_array($data, $initial)) {
$dataAdded[] = $data;
}
}
foreach ($initial as $data) {
if (!in_array($data, $modified)) {
$dataRemoved[] = $data;
}
}