PHP: Kann ich Referenz ein einzelnes Element eines Arrays, die von einer Funktion zurückgegeben wird?

StackOverflow https://stackoverflow.com/questions/68711

  •  09-06-2019
  •  | 
  •  

Frage

eine Idee, wie wenn Folgendes möglich in PHP als eine einzige Zeile:

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

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

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

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

War es hilfreich?

Lösung

Versuchen:

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

Wenn Sie schauen, nur für das erste Element des Arrays.

Andere Tipps

@ Scott Reynen

das ist nicht wahr. Dies funktioniert:

list(,,$thirdElement) = $myArray;

Leider ist das nicht möglich, mit PHP. Sie haben zwei Linien zu verwenden, es zu tun.

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 echo "foo".

list () ist hier nützlich. Mit irgendwelchen, aber das erste Array-Element, werden Sie auf Pad benötigen es mit nutzlosen Variablen. Zum Beispiel:

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

Und so weiter.

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

/**
 * 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');

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

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

auch bemerkt, dass end() nicht erwähnt wird. Es gibt das letzte Element eines Arrays.

Entweder current($array) oder array_shift($array) funktionieren wird, verlassen wird ersteres der array intakt.

Nickf, gut zu wissen, danke. Leider hat die Lesbarkeit Probleme über ein paar Kommas.

Ich denke, eine der oben genannten würde einen Kommentar erfordern, zu erklären, was Sie tun, damit zwei Zeilen werden. Ich finde es einfacher zu tun:

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

Auf diese Weise sind Sie eine zusätzliche Variable nicht verwenden und es ist offensichtlich, was Sie tun.

$firstItem = current(returnsArray());

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

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

und für Strings könnten Sie verwenden

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

.. Interessantes Problem

Draco

Ich vermute, dass dies eine eingebaute oder Bibliotheksfunktion, da es klingt wie Sie es nicht direkt bearbeiten können. Ich empfehle, eine Wrapper-Funktion zu schaffen, um Ihnen die Ausgabe, die Sie brauchen:

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

Soweit ich weiß, dass dies nicht möglich ist, ich wollte das selbst mehrmals tun.

http://us3.php.net/reset

Nur in PHP-Version 5 zur Verfügung.

Wenn es immer das erste Element, sollten Sie vielleicht denken über die Funktion Rückkehr mit nur das erste Element in dem Array. 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);

Meine PHP ist leicht rostig, aber ich bin mir ziemlich sicher, dass das funktioniert.

Sie können auch bei array_shift aussehen () und array_pop ().

Dies ist wahrscheinlich auch möglich:

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

Die 0 ist für die Funktion.

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top