2008-09-16 7 views
11

alguna idea de cómo si el siguiente es posible en PHP como una sola línea:?PHP: ¿Puedo hacer referencia a un único miembro de una matriz que es devuelto por una función?

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

... No parece que 'tomar'. Necesito hacer esto como un 2-paso a paso:

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

... simplemente curiosos - otros idiomas con los que toco permitan este tipo de cosas, y yo soy un vago enoug perderse esta en PHP ... alguna idea apreciada ...

+1

de actualización para PHP 5.4 y, a continuación, puede hacer [gama dereferencing] (http://schlueters.de/blog/archives/138-Features- in-PHP-trunk-Array-dereferencing.html). Puede [encontrarlo en el manual aquí] (http://php.net/manual/en/language.types.array.php#example-87). – hakre

Respuesta

8

Probar:

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

Si lo que buscas es el primer elemento de la matriz.

+0

Eso es realmente genial. ¡Gracias! –

+0

estuvo de acuerdo, y en mi caso esto realmente funciona bastante bien. ¡Tanto por esto! –

+0

impresionante, nunca lea el manual para restablecer() –

6

Por desgracia, eso no es posible con PHP. Tienes que usar dos líneas para hacerlo.

+0

Sí, este es uno de los defectos de PHP. – grom

+0

bueno, es un dolor, pero no es un show-stopper, ¿verdad? Quiero decir, dada la reputación de PHP por el código mal formado y mal administrado, ¡quizás sea algo bueno! : p – nickf

+0

en realidad, las otras respuestas que me señalan para enumerar y restablecer funcionan bien, no son bonitas, pero hacen lo que yo quiero :-) ¡Me encanta este sitio web! –

-1

Por lo que yo sé que esto no es posible, he querido hacer esto por mí mismo varias veces.

3

lista() es útil en este caso. Con cualquiera menos el primer elemento de matriz, deberá rellenarlo con variables inútiles. Por ejemplo:

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

Y así sucesivamente.

9

@ Scott Reynen

eso no es verdad. Esto funcionará:

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

nickf, es bueno saberlo, gracias. Desafortunadamente eso tiene problemas de legibilidad más allá de algunas comas.

+0

Sí, eso es muy cierto, lo evito cada vez que puedo, ¡pero aún es posible! :) – nickf

-1

Si es siempre el primer elemento, probablemente debería pensar en tener la función de retorno sólo el primer elemento de la matriz. Si ese es el caso más común, se podría utilizar un poco de frescor:

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

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

Mi php es un poco oxidado, pero estoy bastante seguro de que funciona.

También puede mirar en array_shift() y array_pop().

Esta es, probablemente, también es posible:

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

El 0 es para la función.

5

Usted puede hacer esto en una línea! Use array_shift().

<?php 

echo array_shift(i_return_an_array()); 

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

Cuando se ejecuta esto, se hará eco "foo".

1

De cualquier current($array) o array_shift($array) va a funcionar, el primero será salir de la matriz intacta.

0

Bueno, he encontrado un par de maneras de obtener lo que quieres sin llamar a otra función.

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

y para las cadenas que podría utilizar

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

.. Problema interesante

Draco

1

Puede utilizar array_slice(), así:

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

Observe también d que end() no se menciona. Devuelve el último elemento de una matriz.

0

Creo que cualquiera de los anteriores requerirá un comentario para explicar lo que está haciendo, convirtiéndose así en dos líneas. Me resulta más fácil de hacer:

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

De esta manera, usted no está utilizando una variable adicional y es obvio lo que está haciendo.

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

A veces voy a cambiar la función, por lo que opcionalmente puede devolver un elemento en lugar de toda la matriz:

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

utilizo realmente una función de conveniencia que escribí para tales fines:

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

entonces sólo lo llama así:

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

Supongo que se trata de una función incorporada o de biblioteca, ya que parece que no se puede editar directamente. Yo recomiendo crear una función de contenedor para darle la salida que necesita:

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