Array isoler valeur d'un tableau en variable

Résolu/Fermé
brunodurant42 - 26 déc. 2021 à 21:08
 brunodurant42 - 27 déc. 2021 à 09:42
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
A voir également:

3 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
Modifié le 26 déc. 2021 à 23:34
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
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
Modifié le 26 déc. 2021 à 23:33
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
brunodurant42
27 déc. 2021 à 09:42
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