2008-10-05 11 views
7
function returnsAnArray() 
{ 
    return array ('test'); 
} 

echo returnsAnArray()[0]; 

genera un error de sintaxis en PHP. ¿Cuál es la forma más eficiente de obtener directamente un elemento de una matriz devuelta sin asignar el resultado a una variable temporal?¿La manera más eficiente de indexar una matriz devuelta?

+0

¿Cómo puede haber un error de sintaxis cuando en realidad no hay sintaxis? – artistoex

Respuesta

5

Ésta es una forma, utilizando la construcción list lenguaje

function returnsAnArray() 
{ 
    return array ('test'); 
} 

list($foo)=returnsAnArray(); 

Se podría tomar una secuencia de elementos de un desplazamiento combinando esto con array_slice

list($third,$fourth,$fifth)=array_slice(returnsAnArray(), 2, 3); 
+0

¿por qué el voto a favor? Es una forma válida de acceder a una matriz ... –

+0

Esta es una forma muy agradable de acceder a una matriz. Sin embargo, he visto gente tropezar con esto, quizás porque está fuera de la sintaxis estándar del sabor C (es decir, algo asignado a una función). – pilsetnieks

+0

Entonces, ¿cómo se generaliza para acceder al valor '$ n'th de la matriz? – moritz

1

Esto funciona si sólo hay un miembro de la matriz:

<?php 
echo current(returnsAnArray()); 
?> 
+0

No, no lo hará. current() espera una referencia, por lo tanto, no se puede pasar el valor. Sin embargo, la devolución y devolución deAnArray() pueden funcionar. –

0

Usted puede hacer esto por una matriz indexada de longitud desconocida.

foreach (returnsAnArray() as $item) 
    echo $item; 
-1

me pregunto por qué uno me gustaría evitar crear una variable temporal para una matriz devuelta. ¿Por qué no solo devuelve un valor en lugar de un conjunto completo? Tal vez tendrá que pensar demasiado en la lógica de su programa.

¿O es un problema de rendimiento/memoria? Considere usar references en lugar de crear siempre un nuevo objeto de matriz y devolverlo.

+0

La función real se utiliza para analizar un conjunto de resultados, en algunos casos específicos sé que solo devolveré una sola entrada. Podría refactorizar la solución para usar una función distinta para resultados individuales, pero sentí que terminaría con un código duplicado o enrevesado. –

3

Define una nueva función para devolver un índice específico de una matriz.

function arr_index($arr, $i) { return $arr[$i]; } 

Es posible que desee agregar algunos errores y escribir allí.

y luego usarlo como esto:

echo arr_index(returnsAnArray(), 0); 

feliz :) Codificación

+0

esta es una de las razones por las que no me gusta php. esto debería ser un lenguaje incorporado. (o al menos permítanos hacer algo como fReturnsArray() [1] ... – gpilotino

1

Para matrices regulares indexado numéricamente donde func() devuelve dicha matriz y $ n es el índice que desea:

array_pop(array_slice(func(),$n,1));

Para matrices asociativas (por ejemplo cadenas u otras cosas como claves), o matrices numéricas que no están numeradas y completas a partir de 0..n, es un poco más enrevesado. Donde key $ es la clave que desea:

array_pop(array_intersect_keys(func(),Array($key => ""));

Esto también funcionaría para el primer caso.

Cuestiones relacionadas