Page 1 sur 1

Recoupement de tableau

Posté : 24 juin 2005, 15:20
par Invité
Bonjour,

Je voudrais tout d abord créer un tableau contenant les chiffres de 1 à 52.
Par la suite, je récupère via une base de donnée des entiers un par un et en réalité je voudrai que chaque entier que je trouve soit supprimé du tableau crée au fur et à mesure.

La récupération dans la base ne pose aucun problème en revanche je ne sais ni implémenter si supprimer des éléments dans un tableau c'est pourquoi je sollicite votre aide.

Exemple pour faciliter la compréhension :
Mon tableau comporte les chiffres : 1,2,3,4,5,6
Dans ma base de donnée je "rapporte" : 2,3,5
Je voudrais que mon tableau final soit 1,4,6

Merci d avance à tous.

Posté : 24 juin 2005, 15:24
par pierrot
et je suppose que ton nouveau tableau, tu le veux réindexé...
c'est à dire
newtab[0]=1
newtab[1]=4
newtab[2]=6

c ca?

Posté : 24 juin 2005, 15:26
par guilt92
http://www.laltruiste.com/document.php? ... bleau.html

En fait il s'agirait de faire un array_intersect mais en faisant l'inverse : au lieu d avoir un tableau ou les 2 tableaux se recoupent il faut faire le contraire...

Je ne sais pas si une fonction toute faite existe

Effectivement

Posté : 24 juin 2005, 15:28
par Invité
En fait le but final est de faire une liste de selection contenant 1 4 et 6 dans l exemple donc soit je réindexe le nouveau tableau soit je la crée directement je ne sais pas

Posté : 24 juin 2005, 15:30
par zeus
//$a_tableau est ton tableau
//$a_bd est le tableau issu de la BD

//On parcour le tableau
foreach($a_tableau as $index => $val) {
  //Si cette valeur est dans la bdd
  if (in_array($va, $a_bdl))
    //on supprime cette valeur du tableau
    unset($a_tableau[$index]);
}
devrait pouvoir faire ce que tu veux

Posté : 24 juin 2005, 15:57
par pierrot
lol, j'viens de faire un script à ma sauce !!! ca marche, mais qd je vois ta soluce zeus, j'suis mort de rire en me disant que ma solution est vraiment pas optimum !!!! mais bon, ca m'aura fait reflechir un peu, c bien...voilà ma solution...et je vous en prie, ne vous moquez pas :D
<?

$tableau_original=array('zero','un','deux','trois','quatre','cinq','six');
$tableau_a_virer=array('un','quatre','six');
$taille=count($tableau_a_virer);
$separator='separator';

echo "<br>voici le tableau initial : <br>";
echo'<pre>';
print_r ($tableau_original);
echo '</pre>';

echo "<br>voici les element a virer : <br>";
echo'<pre>';
print_r ($tableau_a_virer);
echo '</pre>';

for ($i=0; $i<$taille-1;$i++){
$tableau_a_virer[$i]=$tableau_a_virer[$i] . $separator;}


$tableau_remplacer_par=array('','','');

$chaine_implode=implode('separator',$tableau_original);
//echo $tableau_original_implode;

$chaine_implode_modifiee=str_replace($tableau_a_virer,$tableau_remplacer_par,$chaine_implode);
//echo $chaine_implode_modifiee;

$tableau_final=explode($separator,$chaine_implode_modifiee);
$taille2=count($tableau_final);

for ($i=0; $i<$taille2-1; $i++){
$tableau_final_2[$i]=$tableau_final[$i];}

echo "<br>voila le resultat final : <br>";
echo '<pre>';
print_r ($tableau_final_2);
echo '</pre>';

?>

C long hein??? :D Ben oui, mais ca marche alors...chuuuutt :D

Posté : 24 juin 2005, 15:59
par zeus
Attention parce que j'ai pas testé la mienne ...

donc peut être qu'il vaut mieux une longue qui fonctionne plutôt qu'une petite en panne (sans arrière pensée bien sûr ) :roll:

Posté : 24 juin 2005, 16:02
par pierrot
bien sûr ... 8)

Dernier detail

Posté : 24 juin 2005, 16:02
par Invité
Désolé Pierrot mais j ai d abord lu la solution de Zeus donc je suis parti la dessus, c est presque parfait sauf le unset qui en fait en plus de me supprimer la valeur supprime aussi l index... Si il existe une fonction qui supprime la valeur et décale le reste alors cette solution est parfaite...

Juste attention si vous voulez utiliser ce code il faut inverser les parametres dans la fonction in_array, mais a part ca c est niquel...

Merci quand meme Pierrot :wink: si je trouve pas la fonction j essayerai ta méthode

Posté : 24 juin 2005, 16:04
par zeus
Je viens d'éditer pour que ceux qui ne lirait pas jusqu'ici

Mais est-ce que tu as absolument besoin de l'index ?

Si c'est juste une question de parcours, utilise foreach et tu n'as pas besoin d'index qui se suivent

Posté : 24 juin 2005, 16:07
par Invité
Je n ai pas encore codé la suite c etait pour tester en faisant un affichage que je me suis apercu que l index etait "troué".

Cela étant il suffit de faire $tab= array_values($tab); pour réindexer un tableau je viens de découvrir cela et ca marche niquel.

Voila problème résolu merci à tous

Posté : 24 juin 2005, 16:07
par pierrot
bon meme si tu prends celle de zeus, tu pourras qd meme la tester??? ou me dire que tu l'as fait meme si c'est pas vrai :D histoire que je me dise que j'ai pas fait ca pour rien ...lol
J'entends déjà zeus qui va dire " de toute façon tu n'as pas fait ca pour rien, ca te fais progresser, ya que comme ca qu'on avance !!!" me trompe-je??? :D

Posté : 24 juin 2005, 16:14
par zeus
Suis-je si prévisible ?? :shock:

Mais sans rire, c'est comme ça que j'ai appris le PHP : en essayant, ratant et réessayant

Mon chef me répete souvent :
"Faire et défaire, c'est aussi travailler"