Tentunya menggunakan array_mapdan jika menggunakan wadah yang mengimplementasikan ArrayAccessuntuk mendapatkan objek hanyalah cara semantik yang lebih cerdas untuk melakukan hal ini?
Semantik peta larik serupa di sebagian besar bahasa dan implementasi yang pernah saya lihat. Ini dirancang untuk mengembalikan array yang dimodifikasi berdasarkan elemen array input (tingkat tinggi mengabaikan kompilasi bahasa / preferensi jenis runtime); loop dimaksudkan untuk melakukan lebih banyak logika.
Untuk mengambil objek dengan ID / PK, tergantung pada apakah Anda menggunakan SQL atau tidak (sepertinya disarankan), saya akan menggunakan filter untuk memastikan saya mendapatkan array PK yang valid, kemudian meledak dengan koma dan tempatkan ke IN()klausa SQL ke kembalikan set hasil. Itu membuat satu panggilan alih-alih beberapa melalui SQL, mengoptimalkan sedikit call->waitsiklus. Yang terpenting, kode saya akan terbaca dengan baik bagi seseorang dari bahasa apa pun dengan tingkat kompetensi tertentu dan kami tidak mengalami masalah mutabilitas.
<?php
$arr = [0,1,2,3,4];
$arr2 = array_map(function($value) { return is_int($value) ? $value*2 : $value; }, $arr);
var_dump($arr);
var_dump($arr2);
vs.
<?php
$arr = [0,1,2,3,4];
foreach($arr as $i => $item) {
$arr[$i] = is_int($item) ? $item * 2 : $item;
}
var_dump($arr);
Jika Anda tahu apa yang Anda lakukan tidak akan pernah memiliki masalah mutabilitas (mengingat jika Anda berniat menimpa $arrAnda selalu bisa $arr = array_mapdan eksplisit.