PHP:¿Puedo hacer referencia a un solo miembro de una matriz devuelta por una función?

StackOverflow https://stackoverflow.com/questions/68711

  •  09-06-2019
  •  | 
  •  

Pregunta

¿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 paso a paso:

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

...Solo por curiosidad: otros lenguajes con los que juego permiten cosas como esta, y soy lo suficientemente vago como para perderme esto en PHP...cualquier idea se agradece...

¿Fue útil?

Solución

Intentar:

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

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

Otros consejos

@Scott Reynen

eso no es cierto.Esto funcionará:

list(,,$thirdElement) = $myArray;

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

poder ¡Haz esto en una línea!Usar cambio_matriz().

<?php

echo array_shift(i_return_an_array());

function i_return_an_array() {
    return array('foo', 'bar', 'baz');
}

Cuando esto se ejecute, hará eco "foo".

list() es útil aquí.Con cualquier elemento de la matriz excepto el primero, deberá rellenarlo con variables inútiles.Por ejemplo:

list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();

Etcétera.

De hecho, uso una función de conveniencia que escribí para tales propósitos:

/**
 * 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 usar array_slice(), al igual que:

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

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

Cualquiera current($array) o array_shift($array) funcionará, el primero dejará el formación intacto.

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

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

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

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

$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

Supongo que se trata de una función integrada o de biblioteca, ya que parece que no se puede editar directamente.Recomiendo crear una función contenedora para brindarle el resultado que necesita:

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

Hasta donde sé, esto no es posible, he querido hacerlo yo mismo varias veces.

http://us3.php.net/reset

Sólo disponible en php versión 5.

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

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

$array = func();
$item = func(true);

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

También puedes mirar array_shift() y array_pop().

Probablemente esto también sea posible:

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

El 0 es para la función.

A veces cambio la función, para que opcionalmente pueda devolver un elemento en lugar de la matriz completa:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top