2011-12-03 37 views
5

Tôi có một số vấn đề lạ với hàm isset() trong PHP. Hãy để tôi hiển thị ....php isset() trên một biến chuỗi sử dụng một chuỗi như chỉ số

<?php 

$aTestArray = array(
    'index' => array(
     'index' => 'Główna' 
    ), 
    'dodaj' => 'Dodaj ogłoszenie', 
); 

var_dump(isset($aTestArray['index'])); 
var_dump(isset($aTestArray['index']['index'])); 
var_dump(isset($aTestArray['dodaj'])); 

var_dump(isset($aTestArray['index']['none'])); 
var_dump(isset($aTestArray['index']['none']['none2'])); 

// This unexpectedly returns TRUE 
var_dump(isset($aTestArray['dodaj']['none'])); 
var_dump(isset($aTestArray['dodaj']['none']['none2'])); 


?> 

của var_dump sẽ trở lại:

bool(true) 
bool(true) 
bool(true) 

bool(false) 
bool(false) 
bool(true) 
bool(false) 

Tại sao var_dump thứ sáu() trả về TRUE?

Trả lời

12

Khi sử dụng các toán tử [] trên một chuỗi, nó sẽ mong đợi một giá trị số nguyên. Nếu nó không có, nó sẽ chuyển đổi nó. ['none'] được chuyển thành [0], trong trường hợp của bạn là D.

+0

Không chính xác. Một trong những tính năng tốt nhất của PHP là nó _does_ cho phép các phím chuỗi; '['none']' là một tên khóa hợp lệ. – Bojangles

+1

+1 Cũng tốt để giải thích rằng sử dụng '[]' trên một chuỗi cố gắng truy cập các ký tự của nó như là các thành phần mảng. –

+1

@JamWaffles Tuyệt đối! Nhưng đó là khi làm việc với mảng kết hợp. Trong trường hợp này, chúng tôi đang làm một cái gì đó như '' Dodaj ogłoszenie '[' none '] ', không hỗ trợ các khóa có tên. –

1

Nó được vì PHP được viết bằng C. Vì vậy, kể từ $ aTestArray [ 'dodaj'] là chuỗi:

$aTestArray['dodaj']['none'] 

cũng giống như

$aTestArray['dodaj'][0] 

var_dump((int) 'none') 

là 0

+0

Câu trả lời này sẽ hữu ích hơn nhiều nếu nó được thay đổi thành lời nhận xét giải thích cho câu trả lời của Tom. –

Các vấn đề liên quan