Tôi muốn thêm 2 xu của mình vào câu hỏi này, vì tôi đã bỏ lỡ một lối thoát giữa chừng.
Như đã nói isset()
sẽ đánh giá giá trị của khóa để nó sẽ trả về false
nếu giá trị đó là null
nơi array_key_exists()
sẽ chỉ kiểm tra xem khóa có tồn tại trong mảng không.
Tôi đã chạy một điểm chuẩn đơn giản bằng PHP 7, kết quả hiển thị là thời gian cần thiết để hoàn thành việc lặp lại:
$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 kết quả từ chức năng tùy chỉnh này với điểm chuẩn này để 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 isset()
là phương pháp nhanh nhất 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 người ta nên sử dụng array_key_exists()
nếu đó là trường hợp.
Tuy nhiên, có một cách giữa và đó là sử dụng isset() || array_key_exists()
. Mã này thường sử dụng hàm nhanh hơn isset()
và nếu chỉ isset()
trả về false thì sử dụng array_key_exists()
để xác thực. Hiển thị trong bảng trên, nó chỉ nhanh như gọi đơn giản isset()
.
Vâng, đó là một chút nữa để viết và gói nó trong một chức năng chậm hơn nhưng dễ dàng hơn nhiều. Nếu bạn cần điều này để thực hiện, kiểm tra dữ liệu lớn, v.v. hãy ghi lại đầy đủ, nếu không thì việc sử dụng 1 lần mà chi phí rất nhỏ trong chức năng array_key_isset()
là không đáng kể.