PHP:Posso fare riferimento a un singolo membro di un array restituito da una funzione?

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

  •  09-06-2019
  •  | 
  •  

Domanda

qualsiasi idea di come, se è possibile in PHP come una singola riga ?:

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

...Non sembra per 'prendere'.Ho bisogno di fare questo come un 2-passo-passo:

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

...solo curioso di sapere le altre lingue io gioco con il consentire cose come questa, e io sono pigro enoug perdere questo in PHP ...comprensione apprezzato ...

È stato utile?

Soluzione

Provare:

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

Se sei solo alla ricerca del primo elemento dell'array.

Altri suggerimenti

@Scott Reynen

che non è vero.Questo lavoro:

list(,,$thirdElement) = $myArray;

Purtroppo, questo non è possibile con PHP.È necessario utilizzare due linee di farlo.

Si può fate questo in una riga!Utilizzare array_shift().

<?php

echo array_shift(i_return_an_array());

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

Quando questo viene eseguito, si echo "foo".

elenco() è utile qui.Con qualsiasi, ma il primo elemento dell'array, avrai bisogno di pad con inutili variabili.Per esempio:

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

E così via.

Io in realtà uso una funzione comoda che ho scritto per tali scopi:

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

allora devi solo chiamare in questo modo:

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

È possibile utilizzare array_slice(), in questo modo:

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

Anche notato che end() non è detto.Restituisce l'ultimo elemento di un array.

Sia current($array) o array_shift($array) sarà il lavoro, l'ex lascerà il array intatto.

nickf, buono a sapersi, grazie.Purtroppo ha problemi di leggibilità al di là di un paio di virgole.

Penso che una qualsiasi delle sopra richiederebbe un commento per spiegare cosa si sta facendo, diventando così due linee.Io la trovo semplice da fare:

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

In questo modo, non si utilizza una variabile in più ed è ovvio che quello che stai facendo.

$firstItem = current(returnsArray());

Bene, ho trovato un paio di modi per ottenere ciò che si vuole senza chiamare un'altra funzione.

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

e per le stringhe si potrebbe utilizzare

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

..Problema interessante

Draco

Sto indovinando che questo è un built-in o la funzione di libreria, in quanto sembra non è possibile modificare direttamente.Io consiglio di creare una funzione wrapper per dare l'output di cui avete bisogno:

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

Per quanto ne so questo non è possibile, ho voluto fare questo a me stesso più volte.

http://us3.php.net/reset

Disponibile solo in versione di php 5.

Se è sempre il primo elemento, probabilmente si dovrebbe pensare di avere la funzione di restituire solo il primo elemento dell'array.Se questo è il caso più comune, si potrebbe usare un po ' di fresco:

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

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

Il mio php è leggermente arrugginito, ma sono abbastanza sicuro che funziona.

Si può anche guardare la array_shift() e array_pop().

Questo, probabilmente, è anche possibile:

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

Lo 0 è per la funzione.

A volte mi cambia la funzione, quindi, non può restituire un elemento, anziché per l'intero array:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top