Recuperer le premiser élément non nul d'un tableau [Résolu]

Signaler
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
-
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
-
Bonjour,
j'aimerais récuperer le premier élément non nul de mon tableau.
Au fait, dans ma table le champ periode contient par exemple 0|0|0|0|5|6|7|8|7|10|11|12
alors le premier element non nul ici est bien 5 . Alors mon objectif est de le recupérer.

voici ce que j'ai tenté mais ça me donne pas un resultat stable (tantot c'est bon tantot c'est pas bon) .
 foreach($resultats_period AS $rows):
	 $periode = $rows['periode'];
	 $periodes = explode("|",$periode);
	 //print_r($periodes[0]);
$maxs = sizeof($periodes);
$max = $maxs-1;
for($i = 0; $i<$max ; $i++):
    if($periodes[$i] ==0):
	  array_shift($periodes);
	endif;
endfor;
print_r($periodes);
$list = $periodes;
$lists = $list[0];


print_r($periodes);
me donne :Array ( [0] => 0 [1] => 5 [2] => 6 [3] => 7 [4] => 8 [5] => 7 [6] => 10 [7] => 11 [8] => 12 ) au lieu de Array ([0] => 5 [2] => 6 [3] => 7 [4] => 8 [5] => 7 [6] => 10 [7] => 11 [8] => 12 )

du coup
echo $lists = $list[0];
donne 0

2 réponses

Messages postés
32142
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2021
345
Relis le manuel de array_shift
http://php.net/manual/fr/function.array-shift.php

A la place utilise https://secure.php.net/manual/en/function.unset.php

Et aussi... Pourquoi ne pas faire un foreach au lieu de ton for ?
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
là je viens d'essauer avec foreach suis perdu la . sauf si j'ai pas fait comme tu aurais voulu.

je fais
  foreach($resultats_period AS $rows):
	 $periode = $rows['periode'];
	 $periodes = explode("|",$periode);
	 //print_r($periodes[0]);
$maxs = sizeof($periodes);
$max = $maxs;
/*
for($i = 0; $i<$max ; $i++):
    if($periodes[$i] ==0):
	  array_shift($periodes);
      //print_r($periodes);
	endif;
endfor;
*/
   foreach($periodes AS $periode):
     echo $periode[0] ;
   endforeach ;
//print_r($periodes);
$list = $periodes;
pour voir deja si je peux avoir le premier element du tableau $periodes mais ça me donne ca 000056787111 or je pensais afficher 0
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
je sents que je suis pas loin de la reponse .
j'essaie foreach avec array_shift .

quand je fais :
  foreach($resultats_period AS $rows):
	 $periode = $rows['periode'];
	 $periodes = explode("|",$periode);
	 //print_r($periodes[0]);
$maxs = sizeof($periodes);
$max = $maxs;
$i=0;
foreach($periodes AS $periode):
    if($periodes[$i] ==0):
	  array_shift($periodes);
      print_r($periodes);
	endif;
	$i++;
endforeach ;


il affiche :

Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 12 ) Array ( [0] => 0 [1] => 12 ) Array ( [0] => 12 ) Array ( ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 12 ) Array ( [0] => 0 [1] => 12 ) Array ( [0] => 12 ) Array ( ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 12 ) Array ( [0] => 0 [1] => 0 [2] => 12 ) Array ( [0] => 0 [1] => 12 ) Array ( [0] => 12 ) Array ( ).

je je veux qu'il s'arrête à Array ( [0] => 12 ) or lui il m'emmene à Array ( )
du coup le tableau est vide

comment je fais??
Messages postés
32142
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2021
345
Si ton but est de trouver la première valeur non vide ....
	foreach($resultats_period AS $rows):
		$periode = $rows['periode'];
		$periodes = explode("|",$periode);
		 //print_r($periodes[0]);

		for($i = 0; $i<= count($periodes) ; $i++):
			if($periodes[$i] != 0):
				echo "Première valeur non vide : " . $periodes[$i];
				break; // on sort de la boucle
			endif;
		endfor;
	endfor;

Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
1
Merci beaucoup ça marche bien. Que 2018 te soit une année de bonheur , prosperité , santé. tu es trop cool