PHP - comment obtenir l'élément avant le dernier élément d'un tableau?

Comment puis-je obtenir L'élément avant le dernier élément d'un tableau dans PHP5 ?

41
demandé sur Will 2010-02-03 21:28:17

7 réponses

$array[count($array)-2]

Il doit être un tableau indexé numériquement (à partir de zéro). Vous devez avoir au moins deux éléments pour que cela fonctionne. (bien évidemment)

63
répondu Notinlist 2010-02-03 18:32:34

cela fonctionnera même sur ce tableau:

$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";

end($array);
echo prev($array); // will print "how"

les autres solutions utilisant count () supposent que les index de votre tableau vont dans l'ordre; en utilisant end et prev pour déplacer le pointeur du tableau, vous obtenez les valeurs réelles. Essayez d'utiliser la méthode count () sur le tableau ci-dessus et elle échouera.

113
répondu Erik 2010-02-03 18:42:14

array_slice prend un offset négatif comme second argument. Cela vous donnera un unique élément de tableau contenant l'avant-dernier élément:

$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);

Si vous voulez juste la seule valeur propre, vous avez plusieurs options. Si cela ne vous dérange pas d'utiliser une variable intermédiaire, vous pouvez alors juste obtenir la première valeur avec [0] ou appeler array_pop ou array_shift, ils ont tous les deux besoin d'une variable passée par référence ou vous obtiendrez des avertissements en mode strict.

Ou vous pouvez simplement utiliser array_sum ou array_product, qui est un peu hacky mais fonctionne très bien pour les tableaux à un seul élément.

15
répondu James Wheare 2016-02-12 15:05:54

en ce qui me concerne solution assez minuscule

end($array);
echo prev($array);
12
répondu DevAnimal 2016-02-12 15:51:12

une méthode qui fonctionnera pour les deux associatif tableau et tableau numérique est d'utiliser array_pop() pour faire apparaître l'élément à la fin du tableau.

$last = array_pop($array);
$second_last = array_pop($array);

// put back the last
array_push($array, $last);
6
répondu Yada 2010-02-03 18:35:31
// Indexed based array
$test = array('a','b','c','d','e');
$count = count($test);
print $test[$count-2];

// Associative Array
$months = array(
         'jan'=>'January', 
         'feb' => 'february', 
         'mar' => 'March', 
         'apr' => 'April'
    );

$keys = array_keys($months);
$count = count($keys);
print $keys[$count-2];
2
répondu Darshana 2014-01-07 12:24:30

Tous les tableaux ont un "interne pointeur sur le tableau" qui pointe vers l'élément courant array, PHP a plusieurs fonctions qui vous permettent de naviguer à travers le tableau et de voir la clé et la valeur des éléments courants.

  • end() - Définir le pointeur interne d'un tableau de son dernier élément
  • reset() - Définir le pointeur interne d'un tableau de son premier élément
  • prev() - Rembobinez le pointeur interne du tableau
  • next() - avancez le pointeur de tableau interne d'un tableau
  • current() - retourne l'élément courant dans un tableau
  • key() - récupère une clé à partir d'un tableau
  • each() - renvoie la clé courante et la paire de valeurs d'un tableau et avance le curseur du tableau

ces fonctions fonctionnent si le tableau est vide, séquentielle ou associatif et comme un tableau n'a pas été spécifié dans l'exemple que j'ai supposé que cela doit fonctionner avec n'importe quel tableau.

$array = array(
    'before_last' => false,
    'last' => false,
);

end($array); /* 
- set pointer to last element -> $array['last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

prev($array); /* 
- set pointer one place before current pointer -> $array['before_last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

if(!is_null(key($array)){ /* 
- return current element key if it exists -> "before_last"
- else return NULL
*/
    $before_last_element_value = current($array); /* 
    - return current element value if it exists, -> false
    - else return FALSE 
    */
}

Comme vous pouvez le voir, le résultat attendu (false) et le résultat pour un élément inexistant est le même (FALSE) donc vous ne pouvez pas vérifier si un élément existe en utilisant la valeur de l'élément retourné, une clé d'élément est différente.

la clé peut être un entier et chaîne. Valeur peut être de n'importe quel type. source

key() renvoie la valeur de la clé courante si l'élément existe autrement il retournera NULL. Une clé valide ne peut jamais être NULLE si la valeur null est retourné, nous pouvons déterminer que l'élément n'existe pas.

2
répondu TarranJones 2016-10-05 11:31:25