[PHP] Supprimer une valeur d'un tableau

Supprimer une valeur d'un tableau [PHP] - PHP - Programmation

Marsh Posté le 31-10-2005 à 11:00:41    

Bonjour,
 
je voudrais savoir comment faire pour supprimer une valeur d'un tableau.
je parcours mon tableau et je fais des tests pour trouver la valeur à supprimer
une fois la valeur trouvé, je ne voit pas comment faire pour la supprimer.
 

Code :
  1. foreach ($list_typologies as $liste => $val_liste ){
  2.   //test si typo de demande = typo existante
  3.   if($typo_dem==$liste){
  4.     //parcours des retentions
  5.     foreach ($val_liste as $liste_ret){
  6.       //test si ret de demande = ret existante pour la typo si oui on la supprime dans typo
  7.       if($ret_dem==$liste_ret){
  8.          //supprimer $liste_ret  
  9.       }
  10.     }
  11.   }
  12. }


 
 
merci pour votre aide.
 

Reply

Marsh Posté le 31-10-2005 à 11:00:41   

Reply

Marsh Posté le 31-10-2005 à 11:39:04    

Reply

Marsh Posté le 31-10-2005 à 14:11:49    

je ne vois pas comment faire le unset j'ai essayé :
unset ($typo_dem[$liste_ret])
 
 
mais ça ne fonctionne pas.

Reply

Marsh Posté le 31-10-2005 à 14:55:53    

$liste_ret c'est une valeur de tableau là, pas un indice.
 
http://www.php.net/foreach


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 31-10-2005 à 15:08:26    

En même temps j'ai pas compris grand chose à la boucle. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 31-10-2005 à 15:14:31    

c'est un prog que je reprend et je doit faire des modifs dessus.
en fait le tableau permet d'afficher 2 liste deroulante
 
le but est si il y a deja une ret demandée dans une typo demandé, on ne doit plus l'avoir dans la liste déroulante.
donc j'essaie de l'enlever du tableau pour eviter de ressaisir une 2eme fois la meme demande mais c'est la galere.
 
 
je pense que je vais laisser tomber cette méthode et faire un test une fois la demande valider et afficher une popup indiquant qu'il y a 2 fois la demande pour une meme ret et typo. et demander d'ecraser ou non

Reply

Marsh Posté le 17-11-2005 à 11:40:48    

je prends le meme topic (preuve que j'ai fait une recherche, hein !!!) parce que c un grave probleme !!!!!!!!
 
Je trouve ca dingue qu'il existe pas un truc genre array_delete_values() or array_delete_keys() qui supprimerait une entree d un tableau en lui donnait soit la valeur recherche soit la cle correspondante !!!!!!   :o  :o  :o  :o  :o  :o  
 
..... Ou alors je suis aveugle et j'ai pas vu ca sur php.net  :??:  
 
Je peux l'ecrire, mais bon.... chu pas la pour ca a la base... ca devrait exister....
 
Donc si vous l'avez deja ecrite, ou si vous avez une aide a me fournir  :jap:


---------------
ZZZZzzzzz
Reply

Marsh Posté le 17-11-2005 à 11:50:24    

Ouais bon en fait, c etait pas trop long a coder  :D  
 

Code :
  1. function array_delete_value($array,$search) {
  2. $temp = array();
  3. foreach($array as $key => $value) {
  4.  if($value!=$search) $temp[$key] = $value;
  5. }
  6. return $temp;
  7. }
  8. function array_delete_key($array,$search) {
  9. $temp = array();
  10. foreach($array as $key => $value) {
  11.  if($key!=$search) $temp[$key] = $value;
  12. }
  13. return $temp;
  14. }
  15. $a = array("coco" => "salut", "bonjour" => "victor", "bye" => "you" );
  16. print_r($a);
  17. $a = array_delete_value($a,"victor" );
  18. print_r($a);
  19. $a = array_delete_key($a,"bye" );
  20. print_r($a);


 
Outputs :  

Code :
  1. Array
  2. (
  3.     [coco] => salut
  4.     [bonjour] => victor
  5.     [bye] => you
  6. )
  7. Array
  8. (
  9.     [coco] => salut
  10.     [bye] => you
  11. )
  12. Array
  13. (
  14.     [coco] => salut
  15. )


 
Mais bon, je demors pas que ca devrait exister ds PHP !


---------------
ZZZZzzzzz
Reply

Marsh Posté le 17-11-2005 à 14:33:43    

Code :
  1. <?
  2. $a = array(3,5,435,45);
  3. print_r ($a);
  4. echo '<br />';
  5. $a[3] = NULL;
  6. print_r ($a);
  7. echo '<br />';
  8. unset($a[0]);
  9. print_r ($a);
  10. echo '<br />';
  11. ?>


 

Citation :


Array ( [0] => 3 [1] => 5 [2] => 435 [3] => 45 )
Array ( [0] => 3 [1] => 5 [2] => 435 [3] => )
Array ( [1] => 5 [2] => 435 [3] => )


 
 
 
edit: mmm j'ai peut etre répondu à coté en fait [:gratgrat]


Message édité par art_dupond le 17-11-2005 à 14:37:59

---------------
oui oui
Reply

Marsh Posté le 17-11-2005 à 14:43:15    

hmmm ca devrait répondre à la question
 

Code :
  1. <?
  2. $a = array(3,5,"tu vas te taire oui ???",45, "non mais ho" );
  3. unset($a[array_search("tu vas te taire oui ???", $a)]);
  4. print_r ($a);
  5. ?>


 

Citation :

Array ( [0] => 3 [1] => 5 [3] => 45 [4] => non mais ho )


---------------
oui oui
Reply

Marsh Posté le 17-11-2005 à 14:43:15   

Reply

Marsh Posté le 17-11-2005 à 15:04:37    

t'aurais pas plus bourin comme méthode pour effacer un élément d'un tableau?
Pour détruire une variable ou un indice d'un tableau :
http://www.nexen.net/docs/php/anno [...] .unset.php
 
Là, tu consomes pour rien plein de ressources mémoires (doublement de tableau) et de temp processeur (copie de l'intégralité du contenu du tableau) Pour une chôse qui en demande normalement trés peu. Et si tu veux te faire une fonction maison alors utilises plustôt "!==" à la place du simple "!=" ou bien rajoute un test avec "is_array()" par ce que là, si je fais un tableau à plusieurs dimensions et que je te demandes de me suprimer la chaine "array", tu me supprime tout. Idem pour un tableau contenant des objets si je cherche "object".
 
Bref : array_delete_key ne sert à rien (unset fait aussi bien en beaucoup mieux) et ton array_delete_value est loin d'être complet car ne gérant même pas la possibilité d'avoir un tableau dans une case du tableau et tel que tu l'as écrit, c'est remplacable tel qu'indiqué par art_dupond quite à mettre une petite boucle autour pour être sur d'avoir éfaccé toutes les occurences d'une valeur.
 
PS : Juste pour info, s'il n'existe pas de fonction "array_delete_value" c'est surement par ce que pour tout gérer et proposer toutes les options possiblement nécessaire, la fonction serait tellement complexe qu'elle en deveindrait lente et qu'il serait préférable assez souvent de se faire sa propre fonction en fonction de ce qu'on a vraiment besoin.
Voici ce qu'une telle fonction devrai gérer pour être utilisable dans tous les cas:
- recherche multi niveau d'un tableau multidimensionnel avec possibilité de recherche non récursive
- si recherche multi niveau possibilité de dire comment la supression doit être faire (juste l'indice du niveau x qui contient ce qu'est recherché ou l'indice principal du tableau qui contient l'élément contenant la recherche)
- possibilité de recherche en cherchant dans les objets
- possibilité de dire si on tient compte du type de donnée (object, array, texte, nombre, ressource ...) ou si on suprime quelque soit le type (avec le risque qui existe dans ta fonction)
- possibilité de dire si on tient compte de la casse ou pas.
- possibilité de chercher un tableau ou un objet précis
 
Comme tu vois, faire une telle fonction de maniére générique serait bien trop complexe alors qu'on a pas besoin d'une telle complexité dans 98% des cas. il vaut mieux s'en faire une qui correspond vraiment à ce qu'on a besoin. :)

Message cité 2 fois
Message édité par omega2 le 17-11-2005 à 15:08:39
Reply

Marsh Posté le 17-11-2005 à 16:25:42    

omega2 a écrit :


Comme tu vois, faire une telle fonction de maniére générique serait bien trop complexe alors qu'on a pas besoin d'une telle complexité dans 98% des cas. il vaut mieux s'en faire une qui correspond vraiment à ce qu'on a besoin. :)


 
Je suis bien d'accord... Donc.... dans ce cas.....
Ils n'avaient qu'a faire la fonction qui sert dans 98% des cas  :o  (qui, en plus, n'est pas complexe du tt selon ton raisonnment) !!!!!!!!!  :jap:  
Et pr les 2% restants, on se fait sa fonction ! :)
 
Edit :
Et comme tu le dis aussi, on ecrit sa fonction qui correspond a ses besoins....la fonction que j'ai ecrit correspond a mon besoin !! ... c pas une bombe , je sais .... je ne l'ai pas soumise a Mr PHP  ;)  
D'ailleurs, je me plie devant l'efficacite du unset... je ne pensais pas que ca marchait pr un morceau de tableau !!!!  
 
 :hello:


Message édité par dcvlm le 17-11-2005 à 16:29:27

---------------
ZZZZzzzzz
Reply

Marsh Posté le 17-11-2005 à 17:48:04    

ma "array_delete_value" est déjà mieux que la tienne :o

Message cité 1 fois
Message édité par art_dupond le 17-11-2005 à 17:48:24

---------------
oui oui
Reply

Marsh Posté le 17-11-2005 à 18:15:02    

art_dupond a écrit :

ma "array_delete_value" est déjà mieux que la tienne :o


 
Oui, mais la mienne est plus grosse que la tienne !  :lol:  :lol:  :lol:


---------------
ZZZZzzzzz
Reply

Marsh Posté le 17-11-2005 à 18:17:04    

arf je ne m'attendais pas du tout à celle la :p
 

Spoiler :

je voulais juste m'assurer qu'on avait bien vu ma réponse :o


---------------
oui oui
Reply

Marsh Posté le 29-06-2010 à 21:15:55    

omega2 a écrit :

Pour détruire une variable ou un indice d'un tableau :
http://www.nexen.net/docs/php/anno [...] .unset.php


 
Le lien n'est plus bon.
Allez plutôt ici:  http://www.lephpfacile.com/manuel- [...] .unset.php.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed