2010-03-23 30 views
7

En php ¿cómo puedo acceder a los valores de una matriz sin usar corchetes alrededor de la clave? Mi problema particular es que quiero acceder a los elementos de una matriz devuelta por una función. La función Say (args) devuelve una matriz. ¿Por qué $ var = function (args) [0]; gritándome acerca de los corchetes? ¿Puedo hacer algo como $ var = function (args) .value (0); o me estoy perdiendo algo muy básico?accediendo a valores de matriz sin corchetes en php

+0

php se refiere a esto como referencia de matriz de funciones. Se ha incluido en php desde la versión 5.4 http://php.net/manual/en/migration54.new-features.php – Steve

Respuesta

10

Como los otros han dicho, que bastante tienen que utilizar una variable temporal:

$temp = myFunction(); 
$value = $temp[0]; 

Pero, si conocer la estructura de la matriz que se devuelve es posible evitar la variable temporal.

Si lo que desea es el primer miembro:

$value = reset(myFunction()); 

Si desea que el último miembro:

$value = end(myFunction()); 

Si desea cualquiera de entre:

// second member 
list(, $value) = myFunction(); 

// third 
list(, , $value) = myFunction(); 

// or if you want more than one: 

list(, , $thirdVar, , $fifth) = myFunction(); 
+0

¡Ey, listo! 'list()' nunca deja de sorprenderme. +1. –

+1

reset() y end() requieren que los argumentos sean referencias. Recibe un aviso de E_STRICT en versiones recientes de php. – goat

+1

sí, he estado haciendo esto con variables temporales, pero me preguntaba si realmente lo necesitaba. ahora solo me pregunto por qué tengo que hacerlo. pero en cualquier caso, el uso de list() es bastante ingenioso. ¡Gracias! – amb

2

En PHP, al conseguir una matriz como resultado de la función, que por desgracia tiene que hacer un paso adicional:

$temp_array = function($args); 
$var = $temp_array[0]; 

Para los objetos, esto se ha relajado en PHP 5. Se puede hacer:

$echo function($args)->property; 

(siempre function devuelve un objeto, por supuesto.)

+2

Apesta, pero esta es la única forma de hacerlo. Una de las muchas razones para odiar PHP. –

+0

@Luke cierto, pero no * que * malo imo. Quién sabe, puede arreglarse en PHP 7 :) –

+0

@Luke - eso es un poco fuerte ¿no? – nickf

1
function getKey($array, $key){ 
    return $array[$key]; 
} 

$var = getKey(myFunc(args), $key); 

no hay manera de hacerlo esto sin agregar una función de usuario desafortunadamente. Simplemente no es parte de la sintaxis.

Siempre se puede simplemente hacerlo de la manera antigua

$array = myFunc(); 
$value = $array[0]; 
1

¿Qué es exactamente coincide con su expectativa es:

echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey')); 

respondió Kinetix Kin, Taipei

1

si desea que este, probablemente lo mejor sea regresarán un objeto (por desgracia, su php totalmente cojo no soporte este). Aquí está una manera loca yo era capaz de averiguar, sin embargo, de la novedad (por favor no hacer esto!):

function returnsArray(){ 
    return array("foo" => "bar"); 
} 

echo json_decode(json_encode((object)returnsArray()))->foo; 
//prints 'bar' 

Así yeah..until que añaden soporte para la eliminación de referencias matriz en PHP, creo que es probable que sólo debe convertir la matriz de retorno como un objeto:

return (object)array("foo" => "bar"); 

y entonces usted puede hacer returnsArray() -> foo, a partir de PHP relaja eliminación de referencias a objetos, pero no la viste .. o, por supuesto, escribir función de contenedor, como otros han sugerido.

+0

también, parece que el soporte para esto se ha agregado recientemente a php? http://wiki.php.net/rfc/functionarraydereferencing – mutexkid

Cuestiones relacionadas