Bonjour
J'ai un problème avec le sizeof(). Au dépard il me compte bien les lignes
que contient le tableau (8 lignes). L'affichage des lignes est bon.
J'efface la ligne 1 ayant la clé 0. avec la fonction ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //Array ( [0] => Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 ) // [1] => Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 6 ) // [2] => Array ( [0] => 3 [1] => 7 [2] => 8 [3] => 9 ) // [3] => Array ( [0] => 4 [1] => 10 [2] => 11 [3] => 12 ) // [4] => Array ( [0] => 5 [1] => 13 [2] => 14 [3] => 15 ) // [5] => Array ( [0] => 6 [1] => 16 [2] => 17 [3] => 18 ) // [6] => Array ( [0] => 7 [1] => 19 [2] => 20 [3] => 21 ) // [7] => Array ( [0] => 8 [1] => 22 [2] => 23 [3] => 24 ) )
tr.php
test.php (affichage)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $b=$_SESSION['b'];// contient le tableau $e=$_POST['sel'];// contient les clé à effacer foreach ($e as $ligne) { if (array_key_exists($ligne, $b)) {unset($b[$ligne]);} else{echo"la clé n'existe pas<br/>";} } $sc=$b;$_SESSION['b']=$sc; header("location:test.php");
Le print_r(); me donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php $b=$_SESSION['b']; ?> <form method="post" action="tr.php"> <table border="1" align="center" cellpadding="0" cellspacing="0"><?php $nbr=sizeof($b); for($i=0;$i<=$nbr;$i++){ if($b[$i][0]!=""){$keys=array_search($b[$i],$b); echo'<tr> <td colspan="1"><input type="checkbox" name="sel[]" value="'.$keys.'" />'.$keys.'</td> <td colspan="1">'.$b[$i][1].'</td> <td colspan="1">'.$b[$i][2].'</td> <td colspan="1">'.$b[$i][3].'</td> </tr> '; } } ?> <tr> <td colspan="2">cliquez sur le bouton pour détruire</td><td align="center" colspan="1"><input type="submit" name="delete" value="2" /></td> <td colspan="2"><?php echo $nbr;?></td> </tr> </table> </form> <?php ?>
A l'affichage c'est bon. Le sizeof me donne bien 7
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //Array ( [1] => Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 6 ) // [2] => Array ( [0] => 3 [1] => 7 [2] => 8 [3] => 9 ) // [3] => Array ( [0] => 4 [1] => 10 [2] => 11 [3] => 12 ) // [4] => Array ( [0] => 5 [1] => 13 [2] => 14 [3] => 15 ) // [5] => Array ( [0] => 6 [1] => 16 [2] => 17 [3] => 18 ) // [6] => Array ( [0] => 7 [1] => 19 [2] => 20 [3] => 21 ) // [7] => Array ( [0] => 8 [1] => 22 [2] => 23 [3] => 24 ) )
Par contre si je re execute la fonction de destruction avec une
nouvelle clé par exemple : 1
La ligne est bien effacée. Mais l'affichage me montre que la ligne
1 est effacée, cependant la dernière ligne ne s'affiche pas. Le
sizeof me donne 5 au lieu de 6.
Je fais un print_r(). La dernière ligne n'est pas effacer et j'ai
6 lignes
Si je recommence tout et que j'efface 2 lignes d'entrée par exemple la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //Array ( [2] => Array ( [0] => 3 [1] => 7 [2] => 8 [3] => 9 ) // [3] => Array ( [0] => 4 [1] => 10 [2] => 11 [3] => 12 ) // [4] => Array ( [0] => 5 [1] => 13 [2] => 14 [3] => 15 ) // [5] => Array ( [0] => 6 [1] => 16 [2] => 17 [3] => 18 ) // [6] => Array ( [0] => 7 [1] => 19 [2] => 20 [3] => 21 ) // [7] => Array ( [0] => 8 [1] => 22 [2] => 23 [3] => 24 ) )
0 et 1 en clé.
Il m'efface bien les 2 lignes mais à l'affichage je n'ai que 5 lignes.
La dernière ligne est passé à la trappe, or elle existe bien quand je
fais un print_r()
Le sizeof() me donne 6 ce qu'est bon, mais l'affichage ne m'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //Array ( [2] => Array ( [0] => 3 [1] => 7 [2] => 8 [3] => 9 ) // [3] => Array ( [0] => 4 [1] => 10 [2] => 11 [3] => 12 ) // [4] => Array ( [0] => 5 [1] => 13 [2] => 14 [3] => 15 ) // [5] => Array ( [0] => 6 [1] => 16 [2] => 17 [3] => 18 ) // [6] => Array ( [0] => 7 [1] => 19 [2] => 20 [3] => 21 ) // [7] => Array ( [0] => 8 [1] => 22 [2] => 23 [3] => 24 ) )
que 5 lignes
Si je re-fait un effacage de 2 lignes exemple 2 et 3
J'obtiens en print_r() ceci
les lignes sont effacées. Mais en affichage je n'ai plus qu'une ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //Array ( [4] => Array ( [0] => 5 [1] => 13 [2] => 14 [3] => 15 ) // [5] => Array ( [0] => 6 [1] => 16 [2] => 17 [3] => 18 ) // [6] => Array ( [0] => 7 [1] => 19 [2] => 20 [3] => 21 ) // [7] => Array ( [0] => 8 [1] => 22 [2] => 23 [3] => 24 ) )
Le sizeof me donne 4. La c'est bon mais l'affichage non je n'ai plus
qu'une ligne.
Question :
Qu'est ce qu'il se passe pour que le sizeof() me fasse des erreurs ainsi que
l'affichage ?
Partager