2010-02-15 70 views
7

Tại sao tôi không thể truy cập ngay lập tức các thành phần trong mảng được trả về bởi explode()?Tại sao tôi không thể truy cập phần tử mảng đã phát nổ ngay lập tức?

Ví dụ, điều này không làm việc:

$username = explode('.',$thread_user)[1]; 
//Parse error: syntax error, unexpected '[ 

Nhưng mã này không:

$username = explode('.',$thread_user); 
$username = $username[1]; 

tôi không thường chương trình trong PHP, vì vậy đây là khá khó hiểu đối với tôi.

Trả lời

4

Thực ra, PHP không hỗ trợ cú pháp này. Trong các ngôn ngữ như Javascript (ví dụ), trình phân tích cú pháp có thể xử lý các hoạt động lồng/tổ hợp phức tạp hơn, nhưng PHP không phải là một trong những ngôn ngữ đó.

+2

^câu trả lời thực sự. Thậm chí nếu bạn viết một hàm trả về một mảng bất biến, bạn vẫn không thể lập chỉ mục cuộc gọi hàm (như câu trả lời của James có thể dẫn bạn tin), bởi vì nó chỉ đơn giản là cú pháp không hoạt động. – Chuck

+0

+1 cho nhận xét của Chuck - rõ ràng một số chương trình phòng thủ đã cho phép tôi tránh học PHP hoàn toàn như tôi cần. (và có lẽ tôi không nên trả lời câu hỏi vào ngày cuối cùng của một ngày cuối tuần ba ngày ...) –

6

Lý do không rõ ràng cách thực hiện những gì bạn muốn là explode có thể trả lại false. Bạn nên kiểm tra giá trị trả lại trước khi lập chỉ mục vào nó.

+0

Cảm ơn bạn. Tôi không được sử dụng để trả về các giá trị hành xử như thế và tôi đã bỏ lỡ điều đó khi tôi kiểm tra hướng dẫn sử dụng PHP. –

+0

Nó luôn có vẻ hơi kỳ quặc đối với tôi, nhưng nó rất hữu ích, và không xấu hơn so với ví dụ. phải kiểm tra các cuộc gọi đến malloc trong C cho trả về NULL. –

+2

Nó thực sự chỉ là cú pháp PHP không hỗ trợ điều này. Bạn chỉ đơn giản nói rằng nó được dự định theo cách đó để làm cho mọi người kiểm tra giá trị trả lại của họ? – falstro

2

Kể từ khi bùng nổ() trả về một mảng, bạn có thể sử dụng các chức năng khác như $username = current(explode('.',$thread_user));

1

tôi chỉ sử dụng chức năng của riêng tôi:

function explodeAndReturnIndex($delimiter, $string, $index){ 
    $tempArray = explode($delimiter, $string); 
    return $tempArray[$index]; 
} 

mã ví dụ của bạn sau đó sẽ là:

$username = explodeAndReturnIndex('.', $thread_user, 1); 
1

Dưới đây là cách tải xuống một dòng:

$username = current(array_slice(explode('.',$thread_user), indx,1));

Trong đó indx là chỉ mục bạn muốn từ mảng đã phát. Tôi mới dùng php nhưng tôi thích nói mảng đã phát nổ :)

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