Retirer un element d'un array [Résolu]

Signaler
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
-
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
-
Bonjour à tous et à toutes.

J'ai une petite question que voici.

Je cherche à retirer un élément d'un array  mais sans passer mon array dans une boucle, question d'avoir quelque choses de relativement performant.

Prenons par exemple le array suivant.

$a = array('VAL1', 'VAL2', 'VAL3', VAL700', 'VALXX');

je cherche a obtenir ceci : array('VAL1', 'VAL2', VAL700', 'VALXX');

Je ne trouve pas de fonction qui me permettre d'obtenir le resultat voulu...

J'ai essayer ceci mais ca me donne des résultat asser aléatoire.

$y = array_search('VAL3', $a);
$a = array_splice($a, $y, 1);

Quelqu'un peut m'indiquer la marche à suivre ?
 
  zen69 aka Ortho Le Profett
 
A voir également:

11 réponses

Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
lol je m'excuse de polluer ainsi mon propre post... je vais arreter de poster avant de tester :P

function array_delete($a, $v) {
    while (in_array($v, $a)) {
        $y = array_search($v, $a);
        unset($a[$y]);
    }
    return $a;
}

 
  zen69 aka Ortho Le Profett
 
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
tu devrais utiliser la doc en plus de google :p
http://fr.php.net/manual/fr/function.array-splice.php

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Qu'est-ce que tu crois que j'ai fait poto?

Mon probleme est le suivant:

Valeurs de retour

Retourne le tableau contenant les éléments supprimés.

Moi j'ai besoin comme valeur de retour les éléments non supprimés.

Est-ce que tu connais une fonction qui aurait cette valeur de retour.



 
  zen69 aka Ortho Le Profett
 
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
bin c'est surement ce que tu as en entrée...
tu entre un tableau avec n éléments, la fonction te retourne l'élément supprimé et ton tableau en entrée fait n-1

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
$y = array_search('VAL3', $a);
$a = array_splice($a, $y, 1);
print_r($a);

Hum?
Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Quote
bin c'est surement ce que tu as en entrée...
tu entre un tableau avec n éléments, la fonction te retourne l'élément supprimé et ton tableau en entrée fait n-1



je catch pas ton truc... mais quand je fait print_r($a) comme tu le dis... j'obtiens l'élément supprimer... moi je veux le contraire... je veux tout les elements restant.

 
  zen69 aka Ortho Le Profett
 
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Bon finalement comme je ne trouvais pas de fonction qui me permettait faire ce que je voulais voici ce que j'utilise...

$y = array_search('VAL3', $a);
if ($y==0) {
    $a = array_splice($a, 1);
} elseif ($y==count($a)-1) {
    $y = array_pop($a);
} else {
    $y = array_push(array_splice($a, 0, $y-1), array_splice($a, $y+1));
 }

Pas fini de la tester mais jusqu'à maintenant tout va nickel!
 
  zen69 aka Ortho Le Profett
 
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
finalement c'est portion du code me donne des resultats non desirer :
$y = array_push(array_splice($a, 0, $y-1), array_splice($a, $y+1));
je dois donc continuer de chercher...
 
  zen69 aka Ortho Le Profett
 
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Bon je sais que ce n'est pas très propre... mais bon voici mon work arround.

$y = array_search('VAL3', $a);
if ($y==0) {
    $y = array_shift($a);
} elseif ($y==count($a)-1) {
    $y = array_pop($a);
} else {
    $a[$y] = false;
    $a = array_filter($a);
}

donc voici une fonction qui permet d'enlever une valeur d'un array.

function array_delete($a, $v) {
    do while (in_array($a, $v)) {
        $y = array_search($v, $a);
        if ($y==0) {
            $y = array_shift($a);
        } elseif ($y==count($a)-1) {
            $y = array_pop($a);
        } else {
            $a[$y] = false;
            $a = array_filter($a);
        }
    }
    return $a;
}

NB: cette fonction n'a été testé que sur un array à une dimession, ce code n'est pas optimiser, aucun traitement de valeur éronné.

So... completer la fonction pour quelle répondre à vos besoins.

 
  zen69 aka Ortho Le Profett
 
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
remplacer :
    do while (in_array($a, $v)) {
par :
    do while (in_array($v, $a)) {
 
  zen69 aka Ortho Le Profett
 
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Bon finalement une methode qui me convient a 100%.

function array_delete($a, $v) {
    do while (in_array($a, $v)) {
        $y = array_search($v, $a);
        unset($a[$y]);
    }
    return $a;
}

tse quand on aime se compliquer la vie loll :P

 
  zen69 aka Ortho Le Profett