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

Signaler
Messages postés
496
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
8 novembre 2019
-
msi79
Messages postés
496
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
8 novembre 2019
-
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
27328
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2020
322
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 ?
msi79
Messages postés
496
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
8 novembre 2019

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
msi79
Messages postés
496
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
8 novembre 2019

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
27328
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2020
322
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;

msi79
Messages postés
496
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
8 novembre 2019

Merci beaucoup ça marche bien. Que 2018 te soit une année de bonheur , prosperité , santé. tu es trop cool