Comment puis-je obtenir l'élément avant le dernier élément d'un tableau en PHP 5?
$array[count($array)-2]
Il doit s'agir d'un tableau indexé numériquement (à partir de zéro). Vous devez avoir au moins 2 éléments pour que cela fonctionne. (évidemment)
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 fonctionnent 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 cela échouera.
array_slice prend un décalage négatif comme deuxième argument. Cela vous donnera un tableau d'éléments unique contenant l'avant-dernier élément:
$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);
Si vous voulez juste la valeur unique seule, vous avez plusieurs options. Si cela ne vous dérange pas d'utiliser une variable intermédiaire, vous pouvez simplement obtenir la première valeur avec [0] ou appeler array_pop ou array_shift, ils ont tous deux besoin d'une variable transmise par référence ou vous obtiendrez des avertissements en mode strict.
Ou vous pouvez simplement utiliser array_sum ou array_product, ce qui est un peu hacky mais fonctionne bien pour les tableaux à élément unique.
Quant à moi, assez petite solution
end($array);
echo prev($array);
Une méthode qui fonctionnera à la fois pour le tableau associatif et le tableau numérique consiste à utiliser array_pop()
pour faire disparaî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);
Tous les tableaux ont un "pointeur de tableau interne" qui pointe vers l'élément de tableau actuel, PHP a plusieurs fonctions qui permettent pour naviguer dans le tableau et afficher la clé et la valeur des éléments actuels.
end()
- Définit le pointeur interne d'un tableau sur son dernier élémentreset()
- Définit le pointeur interne d'un tableau sur son premier élémentprev()
- Rembobine le pointeur du tableau internenext()
- Avance le pointeur de tableau interne d'un tableaucurrent()
- Retourne l'élément courant dans un tableaukey()
- Récupère une clé dans un tableaueach()
- Retourne la paire clé/valeur actuelle d'un tableau et avance le curseur du tableauCes fonctions fonctionnent que le tableau soit vide, séquentiel ou associatif et comme un tableau n'a pas été spécifié dans l'exemple, j'ai supposé que cela devait 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 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 d'élément retournée, une clé d'élément est différent.
La clé peut être soit entier ou chaîne . La valeur peut être de n'importe quel
type
. source
key()
renvoie la valeur de la clé courante si l'élément existe sinon il renverra NULL. Une clé valide ne peut jamais être NULL, donc si null est retourné, nous pouvons déterminer que l'élément n'existe pas.
// 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];