Ai đó có thể giải thích cho tôi lý do bạn không thể chuyển khóa làm tài liệu tham khảo?Giải pháp thay thế để chuyển cả khóa và giá trị theo tham chiếu:
Ex:
if(is_array($where)){
foreach($where as &$key => &$value){
$key = sec($key);
$value = sec($value);
}
unset($key, $value);
}
Ném:
Fatal error: Key element cannot be a reference in linkstest.php on line 2
Tôi có thể làm điều gì đó tương tự như sử dụng array_map? Tất cả những gì tôi muốn làm là lặp qua một mảng kết hợp, và thoát cả khóa và giá trị bằng hàm sec() của tôi.
đồ Mảng là khó cho tôi để hiểu:
Tôi đã thử nhiều thứ với array_map, nhưng tôi không thể làm cho nó hoạt động trên các phím trực tiếp.
Tôi có nhận được bất kỳ lợi ích hiệu suất nào khi sử dụng bản đồ mảng hơn là chỉ sử dụng vòng lặp foreach không?
Những gì tôi không thích về foreach là tôi không thể hoạt động trên các mảng trực tiếp, và phải đối phó với việc tạo ra các mảng tạm thời và unset họ:
foreach($where as $key => $value){
$where[secure($key)] = secure($value);
}
này có thể thất bại nếu nó tìm thấy một cái gì đó để thoát khỏi khóa, thêm một phần tử mới và giữ nguyên tố chưa thoát.
Vì vậy, tôi bị mắc kẹt với một cái gì đó như thế này?
$temparr = array();
foreach($where as $key => $value){
$temparr[secure($key)] = secure($value);
}
$where = $temparr;
unset($temparr);
Bất kỳ giải pháp thay thế nào?
Điều này xứng đáng là một tuổi lớn * Tại sao *? Điều gì sẽ xảy ra nếu kết quả 'sec ($ key)' trong giá trị của một khóa hiện có khác? Bạn chỉ cần ghi đè khóa hiện có? Bạn cần phải giải thích lý do tại sao trong ứng dụng của bạn một chìa khóa có thể nguy hiểm. – webbiedave
Tại sao nó không nguy hiểm? Bạn có thể dễ dàng thay đổi các phím $ _POST trên các biểu mẫu, hoặc với một cái gì đó như Tamperdata. Một số khóa tôi sử dụng trong các truy vấn mysql. – Ben
Tôi không nói rằng họ không thể. Tôi nói bạn cần giải thích lý do tại sao trong * ứng dụng của bạn * một chìa khóa có thể nguy hiểm. Điều đó sẽ cho chúng tôi biết cách tiếp cận tốt nhất để sử dụng cho tình huống của bạn. – webbiedave