2008-10-05 20 views

Odpowiedz

5

Oto jeden ze sposobów, za pomocą konstruktu list język

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

list($foo)=returnsAnArray(); 

Można chwycić sekwencję elementów z przesunięciem łącząc to z array_slice

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

dlaczego upadek? Jest to poprawny sposób dostępu do tablicy ... –

+0

Jest to bardzo dobry sposób na uzyskanie dostępu do tablicy. Widziałem jednak, jak ludzie się z tym potykają, może dlatego, że wykracza poza standardową składnię smaku C (tj. Coś przypisanego do funkcji). – pilsetnieks

+0

Więc w jaki sposób można go uogólnić, aby uzyskać dostęp do '$ n'tej wartości z tablicy? – moritz

1

To będzie działać, jeśli jest tylko jeden element w tablicy:

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

Nie, nie będzie. current() oczekuje referencji, dlatego nie można przekazać wartości. Jednak powracanie i powrótAnArray() mogą działać. –

0

Można to zrobić na tablicy indeksowanej o nieznanej długości.

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

zadaję sobie pytanie, dlaczego jeden chciałby uniknąć utworzenia zmiennej tymczasowej dla zwróconej tablicy. Dlaczego po prostu nie zwrócisz jednej wartości zamiast całej tablicy? Być może będziesz musiał przemyśleć swoją logikę programu.

Czy jest to problem z wydajnością/pamięcią? Rozważ użycie references zamiast zawsze tworzyć nowy obiekt tablicy i zwracać go.

+0

Rzeczywista funkcja służy do analizowania zestawu wyników, w niektórych konkretnych przypadkach wiem, że zwrócę tylko jeden wpis. Mógłbym refaktoryzować rozwiązanie, aby użyć odrębnej funkcji dla pojedynczych wyników, ale czułem, że skończyłbym z duplikatem lub zawiłym kodem. –

3

Definiowanie nowej funkcji zwracania określonego indeksu z tablicy.

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

Być może zechcesz dodać błąd i sprawdzić typ.

a następnie używać go tak:

echo arr_index(returnsAnArray(), 0); 

Szczęśliwy Coding :)

+0

jest to jeden z powodów, dla których nie lubię php. to powinien być wbudowany język. (lub przynajmniej pozwól nam zrobić coś jak fReturnsArray() [1] ... – gpilotino

1

Dla stałych tablic indeksowanych numerycznie, gdzie func() zwraca taką tablicę, a $ n jest żądanym indeksem:

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

Na asocjacyjnych (np ciągi lub inne rzeczy jako klucze) lub tablice numeryczne, które nie są numerowane i kompletne od 0..n, są nieco bardziej zawiłe. Gdzie $ key to klucz chcesz:

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

to również pracować dla pierwszego przypadku.

Powiązane problemy