Chắc chắn việc sử dụng array_map
và nếu sử dụng một container thực hiện ArrayAccess
để dẫn xuất các đối tượng chỉ là một cách thông minh hơn, về mặt ngữ nghĩa để thực hiện điều này?
Ngữ nghĩa của bản đồ mảng tương tự nhau trên hầu hết các ngôn ngữ và cách triển khai mà tôi đã thấy. Nó được thiết kế để trả về một mảng đã sửa đổi dựa trên phần tử mảng đầu vào (mức cao bỏ qua tùy chọn kiểu thời gian chạy / biên dịch ngôn ngữ); một vòng lặp có nghĩa là thực hiện nhiều logic hơn.
Để truy xuất các đối tượng bằng ID / PK, tùy thuộc vào việc bạn có đang sử dụng SQL hay không (có vẻ như được đề xuất), tôi sẽ sử dụng một bộ lọc để đảm bảo tôi nhận được một mảng các PK hợp lệ, sau đó mã hóa bằng dấu phẩy và đặt vào một IN()
mệnh đề SQL để trả về tập hợp kết quả. Nó thực hiện một cuộc gọi thay vì nhiều cuộc gọi thông qua SQL, tối ưu hóa một chút call->wait
chu trình. Quan trọng nhất là mã của tôi sẽ đọc tốt cho một người từ bất kỳ ngôn ngữ nào có năng lực và chúng tôi không gặp phải vấn đề về khả năng thay đổi.
<?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);
Nếu bạn biết những gì bạn đang làm sẽ không bao giờ có vấn đề về khả năng thay đổi (hãy ghi nhớ nếu bạn có ý định ghi đè, $arr
bạn luôn có thể $arr = array_map
và rõ ràng.