tôi muốn thêm 2 cent của tôi về vấn đề này, vì tôi đã mất tích một cách trung ra.
Như đã nói isset()
sẽ đánh giá giá trị của khóa vì vậy nó sẽ trở false
nếu giá trị đó là null
nơi array_key_exists()
sẽ chỉ kiểm tra xem phím tồn tại trong mảng.
Tôi đã chạy một chuẩn mực đơn giản sử dụng PHP 7, kết quả cho thấy là thời gian mất để hoàn thành lặp:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
Tôi đã thêm các kết quả từ chức năng tùy chỉnh này với điều này điểm chuẩn cũng sẽ hoàn thành:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
như đã thấy và đã nói với isset()
là fas phương pháp thử nhưng nó có thể trả về false nếu giá trị là null
. Điều này có thể cho kết quả không mong muốn và thường là một trong những nên sử dụng array_key_exists()
nếu đó là trường hợp.
Tuy nhiên, có cách giữa và đang sử dụng isset() || array_key_exists()
. Mã này thường sử dụng chức năng nhanh hơn isset()
và nếuisset()
trả về false chỉ sau đó sử dụng array_key_exists()
để xác thực. Thể hiện trong bảng trên, nó chỉ nhanh như gọi một cách rõ ràng isset()
.
Có, viết nhiều hơn một chút và gói nó trong một hàm sẽ chậm hơn nhưng dễ dàng hơn rất nhiều. Nếu bạn cần điều này cho hiệu suất, kiểm tra dữ liệu lớn, vv viết nó ra đầy đủ, nếu không nếu sử dụng một thời gian của nó mà rất nhỏ trên không chức năng array_key_isset()
là không đáng kể.
Bạn có thực sự * đã thử * nhanh hơn không? – Tomalak
Tôi chưa chạy bất kỳ điểm chuẩn nào, không. Tôi có nên có trước khi yêu cầu? – alex
'isset' sẽ không bao giờ hoạt động chính xác như' array_key_exists', ví dụ mã được cho là làm cho nó hoạt động giống hệt một thông báo nếu khóa không tồn tại. – deceze