PHP: Puis-je référencer un seul membre d'un tableau retourné par une fonction?

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

  •  09-06-2019
  •  | 
  •  

Question

savez-vous si, en PHP, les éléments suivants sont possibles sur une seule ligne?:

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

... Cela ne semble pas «prendre». Je dois le faire en tant que 2-stepper:

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

... je suis juste curieux - les autres langues avec lesquelles je joue permettent des choses comme ça, et je suis assez paresseux pour manquer ça en PHP ... toute idée appréciée ...

Était-ce utile?

La solution

Essayez:

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

Si vous ne recherchez que le premier élément du tableau.

Autres conseils

@Scott Reynen

ce n'est pas vrai. Cela fonctionnera:

list(,,$thirdElement) = $myArray;

Malheureusement, cela n’est pas possible avec PHP. Vous devez utiliser deux lignes pour le faire.

Vous pouvez faire cela en une seule ligne! Utilisez array_shift () .

<?php

echo array_shift(i_return_an_array());

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

Lorsque cela sera exécuté, cela fera écho à " foo ".

list () est utile ici. Avec n'importe quel élément de tableau, à l'exception du premier, vous devrez le remplir avec des variables inutiles. Par exemple:

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

Et ainsi de suite.

En fait, j'utilise une fonction pratique que j'ai écrite à cette fin:

/**
 * 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;
    }
}

alors vous appelez juste comme ça:

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

Vous pouvez utiliser array_slice () , comme suit:

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

Notez également que end () n'est pas mentionné. Il retourne le dernier élément d'un tableau.

Soit current ($ array) ou array_shift ($ array) , le premier laissera le array intact.

nickf, bon à savoir, merci. Malheureusement, cela pose des problèmes de lisibilité au-delà de quelques virgules.

Je pense que tout ce qui précède exigerait un commentaire pour expliquer ce que vous faites, devenant ainsi deux lignes. Je trouve cela plus simple à faire:

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

De cette façon, vous n'utilisez pas de variable supplémentaire et ce que vous faites est évident.

$firstItem = current(returnsArray());

Eh bien, j'ai trouvé plusieurs moyens d'obtenir ce que vous voulez sans appeler une autre fonction.

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

et pour les chaînes que vous pouvez utiliser

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

.. Problème intéressant

Draco

Je suppose qu'il s'agit d'une fonction intégrée ou d'une bibliothèque, car il semble que vous ne puissiez pas la modifier directement. Je recommande de créer une fonction wrapper pour vous donner le résultat dont vous avez besoin:

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

Autant que je sache, cela n’est pas possible, j’ai voulu le faire moi-même plusieurs fois.

http://us3.php.net/reset

Disponible uniquement dans php version 5.

Si c'est toujours le premier élément, vous devriez probablement penser à ce que la fonction ne retourne que le premier élément du tableau. Si tel est le cas le plus courant, vous pouvez utiliser un peu de fraîcheur:

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

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

Mon php est légèrement rouillé, mais je suis sûr que cela fonctionne.

Vous pouvez également consulter array_shift () et array_pop ().

C’est probablement aussi possible:

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

Le 0 est pour la fonction.

Parfois, je change la fonction afin qu'elle puisse éventuellement renvoyer un élément au lieu du tableau entier:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top