2012-01-17 11 views
13

No estoy seguro de si esto es posible, pero no puedo encontrar la manera de hacerlo si es ...elemento de Paso de la matriz PHP devuelto por la función

Quiero conseguir un elemento específico a cabo de una matriz que devuelve una función, sin pasar primero en una matriz ... así ...

$item = getSomeArray()[1]; 


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

¿Cuál es la sintaxis correcta para esto?

+1

posible duplicado de [matriz de acceso devuelto por una función en php] (http: //stackoverflow.com/questions/1459377/access-array-returned-by-a-function-in-php) – outis

+0

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

Respuesta

15

PHP no puede hacer esto pero, es una limitación bien conocida. Tienes todo el derecho a preguntarte "¿estás bromeando?". Lo siento.

Si no le importa que genera una advertencia E_STRICT siempre se puede sacar los elementos primero y último de una matriz con reset y end respectivamente - esto significa que también se puede sacar cualquier elemento desde array_slice puede organizar para el que quiere ser el primero o el último, pero eso tal vez lleva demasiado lejos.

Pero no desespere: la (en este momento venidero) lanzamiento de PHP 5.4 incluirá exactamente esta característica (bajo el nombre array dereferencing).

Actualización: Pensé en otra técnica que funcionaría. Probablemente haya una buena razón por la que nunca he usado esto o lo he visto usado, pero técnicamente hace el trabajo.

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

wow ... qué extraño ... vale ... no te preocupes ... Lo pasaré a través de una matriz de soporte temporal. Muchas gracias. –

2

Sí, php no puede hacer eso. Bat puede utilizar ArrayObect, así:

$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); 
} 

Vale, puede que no trabajan con teclas numéricas, pero no estoy seguro.

+2

Eso levantará un fatal; tienes que hacer 'getSomeArray() -> {1};' Usar llaves para cualquier nombre de propiedad que no cumpla; ver el uso básico de [SimpleXML] (http://www.php.net/manual/en/simplexml.examples-basic.php) para obtener información relacionada. – Dan

0

Como los demás dice, no hay forma directa de hacerlo, por lo general sólo asignarlo a una variable de este modo:

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


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

Estoy bastante seguro de que no es posible hacerlo en PHP. Debe asignar la matriz devuelta a otra matriz antes de poder acceder a los elementos dentro o usarla directamente en alguna otra función que iterará a través de la matriz devuelta (es decir, var_dump (getSomeArray())).

2

La sintaxis a la que se refiere se conoce como desreferencia de funciones de matriz. Todavía no está implementado y hay un RFC for it.

La sintaxis generalmente aceptada es asignar el valor de retorno de la función a una matriz y acceder al valor de eso con la sintaxis $array[1].

Dicho esto, sin embargo, también puede pasar la clave que desee como argumento para su función.

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

Sé que esto es una cuestión de edad, sino que, en su ejemplo, también se puede utilizar para obtener array_pop() el último elemento de la matriz, (o array_shift() para conseguir la primera).

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


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

gracias ... eso no fue en absoluto mi intención, aunque puedo ver con una variedad de 2 elementos cómo se puede malinterpretar como lo que estoy buscando. Estaba intentando descubrir cómo obtener elementos de matriz devueltos directamente por una función. Desde entonces he abandonado PHP como el gigante turd humeante que es y no he mirado atrás. ¡Gracias! :) –

2

PHP 5.4 ha añadido matriz Desreferenciar, aquí es el ejemplo de la documentación de matriz de PHP:

Ejemplo # 7 de matriz dereferencing

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

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

// Previously 
$tmp = getArray(); 
$secondElement = $tmp[0]; // output = a 
Cuestiones relacionadas