2008-09-16 5 views
11

eine Ahnung, wie wenn die folgende möglich ist, in PHP als eine einzige Zeile:PHP: Kann ich auf ein einzelnes Mitglied eines Arrays verweisen, das von einer Funktion zurückgegeben wird?

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

... Es ist nicht zu ‚übernehmen‘ zu sein scheinen. Ich brauche das als 2-Stepper zu tun:

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

... nur neugierig - andere Sprachen, die ich mit erlauben, Dinge wie diese zu spielen, und ich bin enoug faul dies in PHP zu verpassen ... jede Einsicht geschätzt ...

+1

Upgrade auf PHP 5.4 und Sie können dann tun [array dereferencing] (http://schlueters.de/blog/archives/138-Features- in-PHP-trunk-Array-Dereferenzierung.html). Sie können [finden Sie es in der Bedienungsanleitung hier] (http://php.net/manual/en/language.types.array.php#example-87). – hakre

Antwort

8

Versuchen:

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

Wenn Sie gerade für das erste Element des Arrays an.

+0

Das ist wirklich cool. Vielen Dank! –

+0

einverstanden - und in meinem Fall funktioniert das eigentlich ziemlich gut. Danke so viel dafür! –

+0

genial, lesen Sie nie das Handbuch zum Zurücksetzen() –

6

Leider ist das mit PHP nicht möglich. Sie müssen zwei Zeilen dafür verwenden.

+0

Ja, das ist einer der Fehler mit PHP. – grom

+0

Nun, es ist ein Schmerz, aber es ist kein Show-Stopper wirklich ist es? Ich meine, angesichts der Reputation von PHP für schlecht formatierten und schlecht verwalteten Code ist es vielleicht eine gute Sache! : p – nickf

+0

eigentlich, die anderen Antworten zeigen mir auf die Liste und Reset-Arbeit gut - nicht schön, aber sie tun, was ich will sie zu :-) Ich liebe diese Website! –

-1

Soweit ich weiß ist das nicht möglich, ich wollte das selbst mehrmals machen.

3

Liste() ist hier nützlich. Mit jedem außer dem ersten Array-Element müssen Sie es mit nutzlosen Variablen auffüllen. Zum Beispiel:

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

Und so weiter.

9

@ Scott Reynen

, das nicht wahr ist. Das wird funktionieren:

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

nickf, gut zu wissen, danke. Leider hat das Lesbarkeitsprobleme über ein paar Kommas hinaus.

+0

yeah das ist sehr wahr - ich vermeide es wann immer ich kann, aber es ist immer noch möglich! :) – nickf

-1

Wenn es immer das erste Element ist, sollten Sie wahrscheinlich daran denken, dass die Funktion nur das erste Element im Array zurückgibt. Wenn das der häufigste Fall ist, könnten Sie ein wenig Kühle verwenden:

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

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

Mein php etwas rostig, aber ich bin ziemlich sicher, dass das funktioniert.

Sie können auch array_shift() und array_pop() betrachten.

Dies ist wahrscheinlich auch möglich:

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

Die 0 für die Funktion ist.

5

Sie können tun dies in einer Zeile! Verwenden Sie array_shift().

<?php 

echo array_shift(i_return_an_array()); 

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

Wenn dies ausgeführt wird, wird es "foo" echo.

1

Entweder current($array) oder array_shift($array) funktioniert, die ehemalige wird die Array intakt lassen.

0

Nun, ich habe ein paar Wege gefunden, um zu bekommen, was Sie wollen, ohne eine andere Funktion aufzurufen.

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

und für Streicher könnten Sie

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

.. Interessante Problem

Draco

1

Sie können array_slice() verwenden, etwa so:

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

Beachten Sie auch, d dass end() nicht erwähnt wird. Es gibt das letzte Element eines Arrays zurück.

0

Ich denke, jeder der oben genannten würde einen Kommentar benötigen, um zu erklären, was Sie tun, so dass zwei Zeilen werden. Ich finde es einfacher zu machen:

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

Auf diese Weise Sie nicht eine zusätzliche Variable und es ist offensichtlich, was du tust.

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

Manchmal werde ich die Funktion ändern, so kann es ein Element anstelle des gesamten Array optional zurück:

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

Ich benutze eine Komfortfunktion i für solche Zwecke schrieb:

/** 
* 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; 
    } 
} 

dann rufen Sie einfach es etwa so:

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

Ich vermute, dass dies eine integrierte oder Bibliotheksfunktion ist, da es sich anhört, als ob Sie es nicht direkt bearbeiten können. Ich empfehle, eine Wrapper-Funktion zu schaffen, um Ihnen die Ausgabe, die Sie benötigen:

function functionThatReturnsOneElement($arg) 
{ 
    $result = functionThatReturnsAnArray($arg); 
    return $result[0]; 
} 
$firstElement = functionThatReturnsOneElement();