Tôi muốn đích thân đề nghị thứ hai từ Gordon chỉ cần sử dụng một lambda (hoặc tạo) chức năng và một trong hai làm:
array_map(function($el) { return $el * 60; }, $input_array);
(PHP> = 5.3) hoặc
array_map(create_function('$el', 'return $el * 60;'), $input_array);
(PHP < 5.3)
Chắc chắn tôi không thấy lý do sao chép mảng (có thể trở nên cồng kềnh nếu có nhiều giá trị liên quan); Ngoài ra, hãy chú ý rằng việc sử dụng foreach (thứ hai có thể thuận tiện) cũng có thể nguy hiểm nếu bạn không làm việc cẩn thận ... và sau đó việc bảo trì có thể trở nên khó khăn (bởi vì bạn phải nhớ xử lý nó mọi lúc bạn làm việc trên mã đó).Nếu bạn không có lý do để tối ưu hóa ở giai đoạn này (IE ứng dụng của bạn không có vấn đề về tốc độ), đừng làm điều đó ngay bây giờ và đừng lo lắng về việc sử dụng array_map. Bạn có thể nghĩ về sự bảo trì dễ dàng ngay bây giờ và tối ưu hóa sau này, trong trường hợp bạn thực sự cần.
Trong thực tế, nếu bạn đi bằng cách tham khảo và sau đó bạn sử dụng foreach một lần nữa, bạn có thể bước vào kết quả bất ngờ (xem ví dụ dưới đây ...)
$a=array('1','2','3');
foreach ($a as &$v) {
$v *= 60;
}
print_r($a);
foreach ($a as $v);
print_r($a);
Output là:
Mảng ( [0] => 60 [1] => 120 [2] => 180 )
mảng ( [0] => 60 [1] => 120 [2] => 120 )
Có lẽ không phải những gì bạn mong đợi vào chu kỳ thứ hai. Đây là lý do tại sao tôi thường tránh kết hợp byref & byref khi có thể.
Tôi sẽ tìm giải pháp array_map/bcmul mà Gordon cung cấp nếu bạn không muốn sử dụng chức năng foreach hoặc tùy chỉnh, bạn đã xem xét * không * nhân mảng với 60 và thay vào đó chia thời gian PHP cho 60 ? –
Tôi sẽ thử tất cả các ví dụ, chỉ vì vậy tôi biết làm thế nào để làm điều đó trong tương lai. Vòng lặp foreach dường như đơn giản nhất. Sự khác nhau giữa * = và * là gì? – Henryz
Henryz: $ a * = 6 là dạng ngắn của $ a = $ a * 6 – lamas