[RESOLU] Undefined offset avec la fonction 'in_array'

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Undefined offset avec la fonction 'in_array'

Re: Undefined offset avec la fonction 'in_array'

par terebenthine » 29 avr. 2019, 14:58

@@arthur Merci !

Re: Undefined offset avec la fonction 'in_array'

par @rthur » 29 avr. 2019, 14:34

Ou plus simplement, tu vérifies que cette entrée du tableau existe avant de vérifier sa valeur.

Ton code :
if (!in_array($entree, $caracteres[$i])) {
Avec cette petite vérification additionnelle :
if (isset($caracteres[$i]) && !in_array($entree, $caracteres[$i])) {

Re: Undefined offset avec la fonction 'in_array'

par terebenthine » 29 avr. 2019, 14:25

...

Après tests, il faut plutôt écrire :
foreach ($motifs as $cle=> $tableau) {
	
	$caracteres[$cle] = array_values(array_unique($caracteres[$cle]));
	
}
Pour que cette boucle fonctionne, le compteur d'origine doit commencer avec 0 et pas avec -1.

:)

Re: Undefined offset avec la fonction 'in_array'

par terebenthine » 29 avr. 2019, 13:45

@@rthur Merci pour ton aide.

Les messages d'erreur sont :
NOTICE Undefined offset: 0 on line number 12
WARNING in_array() expects parameter 2 to be array, null given on line number 12
NOTICE Undefined offset: 1 on line number 12
WARNING in_array() expects parameter 2 to be array, null given on line number 12
Cette ligne 12 correspond à :
if (!in_array($entree, $caracteres[$i])) {
J'ai peut-être trouvé la solution sous réserve de tests, avec array_values (array_unique préserve les clefs). Dans ce cas, inutile de tester si la valeur n'existe pas, puisque c'est l'origine de la difficulté.
foreach ($caracteres as $cle => $tableau) {
	
	$caracteres[$cle] = array_values($caracteres[$cle]);
	
}
C'est du bricolage, certes. :)

Encore merci.

Térébenthine.

Re: Undefined offset avec la fonction 'in_array'

par @rthur » 29 avr. 2019, 11:07

Quel est le message d'erreur exact ?
à priori je dirai que tu appelles un $i du tableau $caractères qui n'existe pas et le $i problématique est indiqué dans le message d'erreur

Undefined offset avec la fonction 'in_array'

par terebenthine » 29 avr. 2019, 10:36

Bonjour,

J'essaie d'extraire des tableaux à partir d'un chaîne de caractères, et j'obtiens invariablement un message d'erreur de Php. Message d'erreur non bloquant, puisque Php renvoie les résultats attendus.

Voici deux variations de mon code...
$entrees = ['A', '1', '3', '5', '1', '3', 'B', '2', '4', '6', '4', '6', 'C'];

$i = -1;

$caracteres = [];

foreach($entrees as $entree) {

	if (is_numeric($entree)) {

		$caracteres[$i][] = $entree;
		
	} else {
	
		$i++;
	
	}
	
}

print_r($caracteres);
Là, rien à dire, ça fonctionne. :)
$entrees = ['A', '1', '3', '5', '1', '3', 'B', '2', '4', '6', '4', '6', 'C'];

$i = -1;

$caracteres = [];

foreach($entrees as $entree) {

	if (is_numeric($entree)) {
	
		if (!in_array($entree, $caracteres[$i])) {

			$caracteres[$i][] = $entree;
			
		}
		
	} else {
	
		$i++;
	
	}
	
}

print_r($caracteres);
Là Php grogne... Il me dit qu'il ne connaît pas l'offset à la ligne
 if (!in_array($entree, $caracteres[$i]))
et qu'il attend un tableau comme paramètre. Pourtant, il affiche les résultats.

Deux remarques...
1. Le but n'est pas de séparer les caractères alphabétiques et numériques. Mon code est nettement plus complexe.
2. Mes tableaux ne peuvent pas compter de doublons pour que mon algorithme fonctionne.

Merci pour vos aides et vos avis. :)

Terebenthine.