2012-01-17 17 views
13

Non sono sicuro se questo è possibile, ma io non riesco a capire come farlo se è ...Ottenere elemento da array PHP restituito dalla funzione

Voglio ottenere un elemento specifico fuori di un array che viene restituito da una funzione, senza prima passare in un array ... così ...

$item = getSomeArray()[1]; 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 

Qual è la sintassi corretta per questo?

+1

possibile duplicato del [gamma di accesso restituito da una funzione in PHP] (http: //stackoverflow.com/questions/1459377/access-array-returned-by-a-function-in-php) – outis

+0

http://stackoverflow.com/a/35601314/2035600 – shan

risposta

15

PHP non può fare questo ma, è un limite noto. Hai tutto il diritto di chiedersi "mi stai prendendo in giro?". Scusate.

Se non ti dispiace la generazione di un E_STRICT avvertimento si può sempre tirare fuori il primo e l'ultimo elemento di un array con rispettivamente reset e end - questo significa che si può anche tirare fuori qualsiasi elemento dal array_slice può organizzare per chi vuoi rimanere primo o ultimo, ma forse è troppo lontano.

Ma non disperate: il rilascio di PHP 5.4 (in questo momento imminente) includerà esattamente questa funzione (con il nome array dereferencing).

Aggiornamento: Ho appena pensato a un'altra tecnica che avrebbe funzionato. Probabilmente c'è una buona ragione per cui non l'ho mai usato o visto, ma tecnicamente fa il lavoro.

// To pull out Nth item of array: 
list($item) = array_slice(getSomeArray(), N - 1, 1); 
+0

wow ... che bizzarro ... ok ... non preoccuparti ... lo passerò attraverso un array di supporti temporanei. Grazie mille. –

2

Sì, php non può farlo. Bat è possibile utilizzare ArrayObect, in questo modo:

$item = getSomeArray()->{1}; 
// Credits for curly braces for Bracketworks  

function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return new ArrayObject($ret, ArrayObject::ARRAY_AS_PROPS); 
} 

Okay, forse non funziona con i tasti numerici, ma non sono sicuro.

+2

Questo porterà ad un fatale; devi fare 'getSomeArray() -> {1};' Usa le parentesi graffe per qualsiasi nome di proprietà non conforme; si veda l'uso di base [SimpleXML] (http://www.php.net/manual/en/simplexml.examples-basic.php) per le informazioni correlate. – Dan

0

Mentre gli altri dice, non v'è alcun modo diretto per fare questo, io di solito solo assegnarlo a una variabile in questo modo:

$items = getSomeArray(); 
$item = $items[1]; 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 
0

Sono abbastanza certo che non è possibile fare in PHP. È necessario assegnare l'array restituito a un altro array prima di poter accedere agli elementi all'interno o utilizzarlo direttamente in qualche altra funzione che eseguirà l'iterazione mediante l'array restituito (ad es. Var_dump (getSomeArray())).

2

La sintassi a cui ci si riferisce è nota come funzione di dereferenziazione dell'array. Non è ancora stato implementato e c'è un RFC for it.

La sintassi generalmente accettata consiste nell'assegnare il valore restituito della funzione a un array e accedere al valore da quello con la sintassi $array[1].

Detto questo, tuttavia, è possibile anche passare la chiave desiderata come argomento alla propria funzione.

function getSomeArray($key = null) { 
    $array = array(
    0 => "cheddar", 
    1 => "wensleydale" 
); 

    return is_null($key) ? $array : isset($array[$key]) ? $array[$key] : false;  
} 

echo getSomeArray(0); // only key 0 
echo getSomeArray(); // entire array 
1

So che questa è una vecchia questione, ma, nel tuo esempio, si potrebbe anche usare array_pop() per ottenere l'ultimo elemento dell'array, (o array_shift() per ottenere il primo).

<?php 
$item = array_pop(getSomeArray()); 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 
+0

grazie ... non era affatto mia intenzione, anche se posso vedere con una serie di 2 elementi come può essere erroneamente interpretato come quello che sto cercando. Stavo cercando di capire come ottenere gli elementi dell'array restituiti direttamente da una funzione. Da allora ho abbandonato PHP come il gigantesco stronzo fumante che è e non ho guardato indietro. Grazie comunque! :) –

2

PHP 5.4 ha aggiunto Array Dereferenziare, Ecco l'esempio dalla documentazione Array di PHP:

Esempio # 7 Array dereferenziazione

function getArray() { 
    return ['a', 'b', 'c']; 
} 

// PHP 5.4 
$secondElement = getArray()[0]; // output = a 

// Previously 
$tmp = getArray(); 
$secondElement = $tmp[0]; // output = a 
Problemi correlati