2008-10-05 40 views
7
function returnsAnArray() 
{ 
    return array ('test'); 
} 

echo returnsAnArray()[0]; 

tạo ra lỗi cú pháp trong PHP. Cách hiệu quả nhất để trực tiếp có được một phần tử từ một mảng được trả về mà không gán kết quả cho một biến tạm thời là gì?Cách hiệu quả nhất để lập chỉ mục một mảng được trả về là gì?

+0

Làm cách nào để có lỗi cú pháp khi thực sự không có cú pháp? – artistoex

Trả lời

5

Dưới đây là một cách, bằng cách sử dụng cấu trúc list ngôn ngữ

function returnsAnArray() 
{ 
    return array ('test'); 
} 

list($foo)=returnsAnArray(); 

Bạn có thể lấy một chuỗi các phần tử từ một bù đắp bằng cách kết hợp này với array_slice

list($third,$fourth,$fifth)=array_slice(returnsAnArray(), 2, 3); 
+0

lý do tại sao các downvote? Đó là một cách hợp lệ để truy cập một mảng ... –

+0

Đây thực sự là một cách rất hay để truy cập một mảng. Tôi đã nhìn thấy những người vấp ngã với nó, mặc dù, có thể bởi vì nó nằm ngoài cú pháp C-hương vị tiêu chuẩn (tức là một cái gì đó được giao cho một chức năng). – pilsetnieks

+0

Vậy làm thế nào để bạn khái quát hóa nó để truy cập giá trị '$ n'th từ mảng? – moritz

1

này sẽ làm việc nếu chỉ có một thành viên trong mảng:

<?php 
echo current(returnsAnArray()); 
?> 
+0

Không, nó sẽ không. current() mong đợi tham chiếu, do đó không thể chuyển giá trị. Quay trở lại và từ trả vềAnArray() có thể làm việc, mặc dù. –

0

Bạn có thể làm điều này cho một mảng chỉ mục có độ dài chưa biết.

foreach (returnsAnArray() as $item) 
    echo $item; 
-1

tôi tự hỏi tại sao người ta muốn tránh tạo một biến tạm thời cho một mảng được trả về. Tại sao bạn không chỉ trả về một giá trị thay vì toàn bộ một mảng? Có lẽ bạn sẽ phải đánh lừa logic chương trình của bạn.

Hoặc đó có phải là sự cố hiệu suất/bộ nhớ không? Cân nhắc sử dụng references thay vì luôn tạo đối tượng mảng mới và trả về nó.

+0

Chức năng thực tế được sử dụng để phân tích một resultset, trong một số trường hợp cụ thể tôi biết tôi sẽ chỉ trả về một mục duy nhất. Tôi có thể cấu trúc lại giải pháp để sử dụng một hàm riêng biệt cho các kết quả duy nhất, nhưng cảm thấy tôi sẽ kết thúc với mã trùng lặp hoặc phức tạp. –

3

Xác định hàm mới để trả về chỉ mục cụ thể từ một mảng.

function arr_index($arr, $i) { return $arr[$i]; } 

Bạn có thể muốn thêm một số lỗi và nhập kiểm tra ở đó.

Và sau đó sử dụng nó như thế này:

echo arr_index(returnsAnArray(), 0); 

Chúc mừng Mã hóa :)

+0

đây là một trong những lý do tôi không thích php. điều này phải là một nội dung ngôn ngữ. (hoặc ít nhất hãy để chúng tôi làm một cái gì đó như fReturnsArray() [1] ... – gpilotino

1

Đối với mảng số lượng được lập chỉ mục thường xuyên, trong đó hàm func() trả về một mảng và $ n là chỉ mục bạn muốn:

array_pop(array_slice(func(),$n,1));

Đối với mảng kết hợp (ví dụ: chuỗi hoặc các thứ khác làm khóa) hoặc mảng số không được đánh số và hoàn thành từ 0..n, nó phức tạp hơn một chút. Trong trường hợp $ key là chìa khóa bạn muốn:

array_pop(array_intersect_keys(func(),Array($key => ""));

Điều này cũng sẽ làm việc đối với trường hợp đầu tiên.

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