Pregunta

En php, a menudo es necesario para asignar a una variable el uso de una matriz ...pero me parece que no puede ser capaz de hacer esto en un transatlántico.c.f.ejemplo:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

Este es un problema menor, pero sigue molestando cada de vez en cuando ...No me gusta el hecho de que puedo usar una variable para nada ;)

¿Fue útil?

Solución

No me molesta acerca de que la variable adicional, la verdad.Si quieres, aunque, también se puede eliminar de la memoria después de que he usado:

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

O, usted podría escribir una pequeña función:

function indexonce(&$ar, $index) {
  return $ar[$index];
}

y llamar con esto:

$something = indexonce(array('a', 'b', 'c'), 2);

La matriz debe ser destruido automáticamente ahora.

Otros consejos

La respuesta técnica es que el Gramática el lenguaje PHP sólo permite la notación de subíndice en el extremo de expresiones variables y no expresiones en general, que es cómo funciona en la mayoría de los otros idiomas.Yo siempre lo he visto como una deficiencia en el lenguaje, porque es posible tener una gramática que resuelve los subíndices en contra de cualquier expresión de forma inequívoca.Podría ser el caso, sin embargo, el uso de un inflexible parser generator o que simplemente no quieren romper algún tipo de compatibilidad hacia atrás.

Aquí hay un par de ejemplos más de válido subíndices en las expresiones válidas:

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.

Esto se llama matriz de eliminar.Se ha añadido en php 5.4.http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

actualización[2012-11-25]: a partir de PHP 5.5, eliminar la referencia ha sido añadido a contants/cadenas así como las matrices de

Este podría no estar directamente relacionados con el..Pero he llegado a este post encontrar la solución a este problema específico.

Tengo un resultado de una función en el siguiente formulario.

Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

lo que yo quería era el parent_id valor "9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a".He utilizado la función como esta y lo consiguió.

array_pop( array_pop( the_function_which_returned_the_above_array() ) )

Así, fue hecho en una línea :) La esperanza sería útil a alguien.

function doSomething()
{
    return $somearray;
}

echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();

en realidad, no es una solución elegante:) El siguiente asignará el 3er elemento de la matriz devuelta por myfunc a $myvar:

$myvar = array_shift(array_splice(myfunc(),2));

O algo así, si usted necesita el valor de matriz en una variable

$variable = array('a','b','c');
$variable = $variable[$key];

Hay varios oneliners usted puede venir para arriba con, el uso de php array_* funciones.Pero te aseguro que si lo hace es total redundante la comparación de lo que se quiere lograr.

Ejemplo, se puede usar algo como la siguiente, pero no es una solución elegante y no estoy seguro sobre el rendimiento de este;

   array_pop ( array_filter( array_returning_func(), function($key){    return $key=="array_index_you_want"? TRUE:FALSE;    },ARRAY_FILTER_USE_KEY ) );

si usted está usando un php framework y usted se queda con una versión anterior de php, la mayoría de los marcos ha de ayudar a las bibliotecas.

ejemplo:Codeigniter matriz de ayudantes

aunque el hecho de que eliminar la referencia ha sido añadido en PHP >=5.4 usted podría haber hecho en una línea usando el operador ternario:

echo $var=($var=array(0,1,2,3))?$var[3]:false;

de esta manera usted no mantiene la matriz de la variable.y no necesita más funciones para hacerlo...Si esta línea se utiliza en una función que automáticamente será destruido al final, pero puede también destruyó a sí mismo como dijo con unset más adelante en el código si es que no se utiliza en la función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top