2008-09-16 29 views
11

bất kỳ ý tưởng như thế nào nếu sau đây là có thể trong PHP như một dòng duy nhất:?PHP: Tôi có thể tham khảo một thành viên của một mảng được trả về bởi một hàm không?

<?php 
$firstElement = functionThatReturnsAnArray()[0]; 

... Nó dường như không 'mất'. Tôi cần phải làm điều này như 2 bước:

<?php 
$allElements = functionThatReturnsAnArray(); 
$firstElement = $allElements[0]; 

... chỉ tò mò - ngôn ngữ khác tôi chơi với phép điều như thế này, và tôi là lười biếng enoug bỏ lỡ này trong PHP ... bất kỳ cái nhìn sâu sắc được đánh giá cao ...

+1

Nâng cấp lên PHP 5.4 và sau đó bạn có thể thực hiện [array dereferencing] (http://schlueters.de/blog/archives/138-Features- trong-PHP-trunk-Array-dereferencing.html). Bạn có thể [tìm nó trong hướng dẫn tại đây] (http://php.net/manual/en/language.types.array.php#example-87). – hakre

Trả lời

8

Hãy thử:

<?php 
$firstElement = reset(functionThatReturnsAnArray()); 

Nếu bạn chỉ tìm kiếm các phần tử đầu tiên của mảng.

+0

Điều đó thực sự tuyệt vời. Cảm ơn! –

+0

đã đồng ý - và trong trường hợp của tôi, điều này thực sự hoạt động khá tốt. Thx rất nhiều cho việc này! –

+0

tuyệt vời, không bao giờ đọc hướng dẫn sử dụng để đặt lại() –

6

Thật không may, điều đó là không thể với PHP. Bạn phải sử dụng hai dòng để làm điều đó.

+0

Vâng, đây là một trong những sai sót với PHP. – grom

+0

tốt, đó là một nỗi đau, nhưng nó không phải là một show-stopper thực sự là nó? Ý tôi là, với danh tiếng của PHP đối với mã được hình thành kém và được quản lý kém, có lẽ đó là một điều tốt! : p – nickf

+0

thực sự, các câu trả lời khác chỉ tôi vào danh sách và đặt lại công việc tốt - không đẹp, nhưng họ làm những gì tôi muốn họ :-) Tôi yêu trang web này! –

-1

Theo như tôi biết điều này là không thể, tôi đã muốn làm điều này bản thân mình nhiều lần.

3

list() là hữu ích ở đây. Với bất kỳ phần tử mảng nào đầu tiên, bạn sẽ cần phải đệm nó bằng các biến vô dụng. Ví dụ:

list($firstElement) = functionThatReturnsAnArray(); 
list($firstElement , $secondElement) = functionThatReturnsAnArray(); 

Và cứ tiếp tục như vậy.

9

@Scott Reynen

điều đó không đúng. Điều này sẽ làm việc:

list(,,$thirdElement) = $myArray; 
0

nickf, tốt để biết, cảm ơn. Thật không may là có vấn đề về khả năng đọc vượt quá một vài dấu phẩy.

+0

yeah đó là rất đúng - tôi tránh nó bất cứ khi nào tôi có thể, nhưng nó vẫn có thể! :) – nickf

-1

Nếu nó luôn là phần tử đầu tiên, bạn có lẽ nên nghĩ đến việc hàm trả về chỉ mục đầu tiên trong mảng. Nếu đó là trường hợp phổ biến nhất, bạn có thể sử dụng một chút mát mẻ:

function func($first = false) { 
    ... 
    if $first return $array[0]; 
    else return $array; 
} 

$array = func(); 
$item = func(true); 

php của tôi hơi bị gỉ, nhưng tôi khá chắc chắn rằng hoạt động.

Bạn cũng có thể xem array_shift() và array_pop().

Đây có lẽ cũng có thể:

array(func())[0][i]; 

Các 0 là cho hàm.

5

Bạn có thể làm điều này trong một dòng! Sử dụng array_shift().

<?php 

echo array_shift(i_return_an_array()); 

function i_return_an_array() { 
    return array('foo', 'bar', 'baz'); 
} 

Khi điều này được thực thi, nó sẽ lặp lại "foo".

1

Hoặc current($array) hoặc array_shift($array) sẽ hoạt động, trước đây sẽ để nguyên mảng .

0

Vâng, tôi đã tìm thấy một vài cách để có được những gì bạn muốn mà không cần gọi một chức năng khác.

$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false; 

và cho chuỗi bạn có thể sử dụng

$string = (($t = functionThatReturnsAnArray())==0) . $t[0]; 

.. Thú vị vấn đề

Draco

1

Bạn có thể sử dụng array_slice(), như vậy:

$elementX = array_slice(functionThatReturnsAnArray(), $x, 1); 

Cũng cần chú ý d rằng end() không được đề cập. Nó trả về phần tử cuối cùng của một mảng.

0

Tôi nghĩ rằng bất kỳ điều nào ở trên sẽ yêu cầu nhận xét để giải thích những gì bạn đang làm, do đó trở thành hai dòng. Tôi thấy nó đơn giản hơn để làm:

$element = functionThatReturnsArray(); 
$element = $element[0]; 

Bằng cách này, bạn không sử dụng thêm biến và rõ ràng bạn đang làm gì.

0
$firstItem = current(returnsArray()); 
-1

Đôi khi tôi sẽ thay đổi chức năng, vì vậy nó có thể tùy chọn trả về một yếu tố thay vì toàn bộ mảng:

<?php 
function functionThatReturnsAnArray($n = NULL) { 
    return ($n === NULL ? $myArray : $myArray[$n]); 
} 
$firstElement = functionThatReturnsAnArray(0); 
1

Tôi thực sự sử dụng một chức năng thuận tiện tôi đã viết cho các mục đích như:

/** 
* Grabs an element from an array using a key much like array_pop 
*/ 
function array_key_value($array, $key) { 
    if(!empty($array) && array_key_exists($key, $array)) { 
     return $array[$key]; 
    } 
    else { 
     return FALSE; 
    } 
} 

sau đó bạn chỉ cần gọi nó như vậy:

$result = array_key_value(getMeAnArray(), 'arrayKey'); 
0

Tôi đoán rằng đây là chức năng tích hợp sẵn hoặc thư viện, vì có vẻ như bạn không thể chỉnh sửa trực tiếp. Tôi khuyên bạn nên tạo hàm bao bọc để cung cấp cho bạn kết quả bạn cần:

function functionThatReturnsOneElement($arg) 
{ 
    $result = functionThatReturnsAnArray($arg); 
    return $result[0]; 
} 
$firstElement = functionThatReturnsOneElement(); 
Các vấn đề liên quan