このような特殊な配列の変更の場合、選択する方法はarray walkです。特定の配列の各要素にカスタム関数を適用できます。
ここで、データ形式のために、ループを実行する必要があります。Wrikken は、データを取得または変換して、より高速なアクセスを提供できるかどうかを尋ねています。以下のアルゴリズムは次のとおりですO(n^2)
。最初の配列の要素数に 2 番目の配列の要素数を掛けた数のサイクル、または正確に が必要ですcount($arr1) * count($arr2)
。
function updateNameFromArray($element, $key, $arr2) {
foreach($arr2 as $value) {
if($value['number'] == $element['number']) {
$element['name'] == $value['name'];
break;
}
}
}
array_walk($arr1, "updateNameFromArray", $arr2);
さて、Wrikken が提案しているのは、代わりに配列を変更してプロパティをキー'number'
にすることができれば、検索/置換操作がはるかに簡単になるということです。したがって、これが代わりのデータである場合:
$arr1 = array(
100=>array('number'=>100,name=>'john'),
200=>array('number'=>200,name=>'johnny')
);
// notice the keys are 100 and 200 instead of 0,1
$arr2= array(
300=>array('number'=>300,name=>'r'),
100=>array('number'=>100,name=>'b'),
200=>array('number'=>200,name=>'c')
);
// notice the keys are 300, 100 and 200 instead of 0,1, 2
O(n)
次に、最初の配列をループするだけで、これを時間内に行うことができます。
foreach($arr1 as $key => $value) {
if(isset($arr2[$key])) {
$value['number'] = $arr2[$key]['number'];
}
}