[RESOLU] Aide pour suppression multiple dans un tableau

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] Aide pour suppression multiple dans un tableau

Re: Aide pour suppression multiple dans un tableau

par moogli » 28 déc. 2016, 11:49

normalement tu n'as pas besoin des index s'ils ne sont as significatif.
si c'est des "identifiants" pas de réindexation

si c'est pour récupérer les données il est préférable d'utiliser la boucle foreach.
pour "dépiler" les données d'un tableau il existe aussi array_pop et array_shift tu n'as pas besoin des index :mrgreen:


ps pense à cliquer sur le bouton résolus (à gauche du titre lorsque que tu estimes que c'est le cas). Je le fait pour toi.

@+

Re: Aide pour suppression multiple dans un tableau

par Elodie-ALC » 28 déc. 2016, 11:24

Merci pour ta réponse, mais j'ai trouvé ce que c'était. Je devais impérativement réindexer le tableau à partir de l'index 1.

En effet, si j'avais 3 articles dans mon tableau, et que je supprimais le second, comme il n'y avait pas de réindexation, le dernier article gardait son index initial. Donc comme mon tableau détectait une taille de 2 après suppression, il ne prenait que l'index 1 et 2. Le dernier tombait donc à l'eau. Et si je réindexais à 0, il me perdait le premier élément car le tableau commence à 1.

Pour réindexer un tableau à partir de l'index 1 :
$tab = array_combine(range(1, count($tab)), array_values($tab));
Voilà :)

Re: Aide pour suppression multiple dans un tableau

par moogli » 26 déc. 2016, 18:07

salut,

1ere chose les if(isset($_POST['cb'])) sont inutiles dans les foreach. Simplement parce que si tu est dans le foreach c'est que $_POST['cb'] existe sinon il y aune erreur sur la ligne du foreach :)

2nd : pourquoi ré indexer ?
La perte des index est du à array_values, regarde bine l'exemple de la doc : http://php.net/manual/fr/function.array-values.php

3ème : je pense que ton système est bancale.
$tab_art me dit que c'est un tableau qui contient des articles ?
si c'est le cas les index doivent être les références article (ou pk de la table qui les contient). C'est la seule référence utile.
ensuite tu met en valeur des checkbox ces références et les utilisent pour la suppression. La réindexation est totalement inutile (anti performante et l'on se fou de savoir s'il y a des "trous" dans les index ou pas :) ).

au final ton code se restreint à
if(!empty($_POST['cb']) && is_array($_POST['cb'])) {
  foreach ($_POST['cb'] as $key => $value) {
    unset($tab_art[$value]);
  }
}
exemple avec test
<?php
$_POST['cb'] = ['art-1','art-2','art-3'];
$tab_art = ['art-1' => 'fdfdfd', 'art-3' => 'ffjkhjkghf','art-4'=>'gardé'];

if(!empty($_POST['cb']) && is_array($_POST['cb'])) {
  foreach ($_POST['cb'] as $key => $value) {
    unset($tab_art[$value]);
  }
}
xdebug_var_dump($tab_art);
résultat

Code : Tout sélectionner

array (size=1) 'art-4' => string 'gardé' (length=6)
@+

Aide pour suppression multiple dans un tableau

par Elodie-ALC » 26 déc. 2016, 17:45

Bonjour,

J'aurais besoin d'aide pour un de mes projets. J'ai un tableau qui contient plusieurs lignes. Ce tableau est multidimensionnel. Grâce à des cases à cocher, je détermine l'index des lignes à supprimer dans le tableau.
foreach ($_POST['cb'] as $key=>$value)
			{
				if(isset($_POST['cb']))
				{
					unset($tab_art[$value]);
					$tab_art=array_values(array_filter($tab_art));
				}
			}
Ici "$_POST['cb']" représente mon tableau de cases à cocher. Pour chacune je teste si la valeur existe dans mon if. Si elle existe, j'essaye de supprimer la ligne correspondante dans le tableau puis je réindexe mon tableau.

PROBLEME : Lorsque je réindexe, je pense que le tableau réindexe tout à partir de 0. Hors, mes tableaux commencent tous à 1, donc je perd ma première ligne. Lorsque je ne réindexe pas, je perd ma dernière ligne.

Si je fais un echo (ci-dessous) des index j'obtient bien les index des lignes à supprimer. Donc pas de problème à ce niveau là, il détecte bien mes cases cochées.
foreach ($_POST['cb'] as $key=>$value)
			{
				if(isset($_POST['cb']))
				{
					echo $value];
				}
			}

Je pense que cela viens de la suppression, ou de la réindexation, mais je n'arrive pas à déterminer exactement le problème, ni comment le résoudre.

HELP PLEASE :(