Array isoler valeur d'un tableau en variable

Résolu
brunodurant42 -  
 brunodurant42 -
Bonjour,

Bonjour à tous

J'ai un petit soucis avec mon code php et un array.

Je me permets de vous expliquer.

Un utilisateur peut sélectionner 4 images sur 6. Ces choix sont récupérés de pages en pages (je ne les envoie pas sur un base de données).

Je récupère ces 4 sélections que je place dans un tableau.

Puis, je souhaite isoler chacune de ces 4 sélections dans 4 variables distinctes.

Je fais comme cela:


<?PHP
// Je vérifie que les choix d'image sont bien récupérés.
// Par exemple, si l'individu a sélectionné, précédemment, l'image 2, le résultat sera le numéro de l'image soit "2"
echo "Image 1: ".$imagepeche1."<br>";
echo "Image 2: ".$imagepeche2."<br>";
echo "Image 3: ".$imagepeche3."<br>";
echo "Image 4: ".$imagepeche4."<br>";
echo "Image 5: ".$imagepeche5."<br>";
echo "Image 6: ".$imagepeche6."<br>";
// Je créé un tableau où je "range" les valeurs des images. Les images choisies apparissent avec leurs numéros sinon c'est vide
$test= array (1=>$imagepeche1,
2=>$imagepeche2,
3=>$imagepeche3,
4=>$imagepeche4,
5=>$imagepeche5,
6=>$imagepeche6);
// Je vérifie que les images sont bien intégrées dans le tableau
print_r ($test);
echo "<br>";
// Je souhaite afficher uniquement les images sélectionnées (là où c'est différent de "vide")
foreach($test as $valeur){
if($valeur<>""){
// Je vérifie les numéros de "cellules" de tableau où sont intégrés les numéros des images
$resultat1=var_dump( explode( ',', $valeur) );
echo $resultat1."<br>";
// Je souhaite associer chaque numéro "non vide" à une variable distincte
list($aa, $bb,$cc,$dd) = $valeur;
echo "A:".$aa."B:".$bb."C:".$cc."D:".$dd;
echo "<br>";
}}
?>


Par exemple, l'utilisateur choisit les images 1, 3, 4 et 6

J'ai ce résultat à l'affichage:

array(1) { [0]=> string(1) "1" }
A:1B:C:D:
array(1) { [0]=> string(1) "3" }
A:3B:C:D:
array(1) { [0]=> string(1) "4" }
A:4B:C:D:
array(1) { [0]=> string(1) "6" }
A:6B:C:D:

Là, où je bloque c'est que chacune des 4 sélections se placent 4 fois mais dans une seule variable et non chacune dans sa variable distincte.
Il faudrait que le résultat soir celui-la A:1 B:3 C:4 D:6 mais j'ai ceci A:1 A:3 A:4 A:6

Je remarque aussi que dans mon affichage j'ai uniquement "array(1) { [0]". Je pense que c'est le problème non ?

J'ai cherché mais je ne sais pas comment résoudre le problème. Je n'arrive pas à voir, dans mon code, où ça pose problème, où je me suis trompé.

Est-ce que vous auriez des pistes à me donner ?

Merci et à bientôt

Bruno

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Déjà, tu peux remplacer
    <ode php>
    $test= array (1=>$imagepeche1,
    2=>$imagepeche2,
    3=>$imagepeche3,
    4=>$imagepeche4,
    5=>$imagepeche5,
    6=>$imagepeche6);
    </code>
    par
    $test= array ($imagepeche1,
    $imagepeche2,
    $imagepeche3,
    $imagepeche4,
    $imagepeche5,
    $imagepeche6);
    


    Ensuite, pour retirer les éventuelles valeurs "vide", tu peux utiliser la fonction array_filter
    function _remove_empty($value) {
      return !empty($value) ;
    }
    $valeur = array_filter($test, '_remove_empty');
    


    et enfin
    list($aa, $bb,$cc,$dd) = $valeur;
    echo "A:".$aa."B:".$bb."C:".$cc."D:".$dd;
    

    et sinon, au lieu de la fonction list (vu que tu as viré les vide du tableau..)
    $aa = $test[0];
    $bb = $test[1];
    $cc = $test[2];
    $dd = $test[3];
    


    0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    tu n'as pas partagé ce qu'affichait
    print_r ($test);
    , je pense.

    au lieu de
    foreach($test as $valeur){
    if($valeur<>""){
    // Je vérifie les numéros de "cellules" de tableau où sont intégrés les numéros des images
    $resultat1=var_dump( explode( ',', $valeur) );
    echo $resultat1."<br>"; 
    // Je souhaite associer chaque numéro "non vide" à une variable distincte
    list($aa, $bb,$cc,$dd) = $valeur;
    echo "A:".$aa."B:".$bb."C:".$cc."D:".$dd;
    echo "<br>";
    }}

    moi j'essaierais:
    $selects = [];
    foreach($test as $valeur){
        if($valeur<>""){
            $selects[]=$valeur;
        }
    }
    list($aa, $bb,$cc,$dd) = $selects;
    echo "A:".$aa."B:".$bb."C:".$cc."D:".$dd;
    echo "<br>";
    0
  3. brunodurant42
     
    bonjour à tous,

    Génial ça marche grâce à vous deux.

    J'ai pris la solution de yb_ge qui m'a été plus pratique au regard du reste de mon code.

    Encore merci

    A bientôt

    Bruno
    0