multidimensional funciones eliminar elementos elemento ejemplos buscar asociativo array agregar php arrays function

funciones - PHP: ¿Puedo hacer referencia a un único miembro de una matriz devuelto por una función?



funciones array php (17)

¿Alguna idea de si lo siguiente es posible en PHP como una sola línea?

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

... No parece ''tomar''. Necesito hacer esto como un 2-stepper:

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

... solo curiosidad - otros idiomas con los que juego permiten cosas como esta, y soy flojo para poder perder esto en PHP ... cualquier idea apreciada ...


De hecho, utilizo 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 simplemente lo llamas así:

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


¡Puedes 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 esto se ejecuta, se repetirá " foo ".


@Scott Reynen

eso no es cierto. Esto funcionará:

list(,,$thirdElement) = $myArray;


Algunas veces cambiaré la función, por lo que opcionalmente puede devolver un elemento en lugar de la matriz completa:

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


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

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

De esta forma, no estás usando una variable adicional y es obvio lo que estás haciendo.


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


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


Si siempre es el primer elemento, probablemente debería pensar en hacer que la función devuelva solo el primer elemento de la matriz. Si ese es el caso más común, podría usar un poco de frialdad:

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

Mi php está ligeramente oxidado, pero estoy bastante seguro de que funciona.

También puede ver array_shift () y array_pop ().

Esto probablemente también sea posible:

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

El 0 es para la función.


Tratar:

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

Si solo estás buscando el primer elemento de la matriz.


list () es útil aquí. 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í.


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



$firstItem = current(returnsArray());


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

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

y para cuerdas podrías usar

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

.. Problema interesante

Draco


Puede usar array_slice() , así:

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

También notó que el end() no se menciona. Devuelve el último elemento de una matriz.


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

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


O bien current($array) o array_shift($array) funcionarán, el primero dejará la matriz intacta.