Extraire les valeurs d'un array php plusieurs dimensions

Madebyj
Invité n'ayant pas de compte PHPfrance

28 avr. 2014, 10:16

Bonjour,

Je travaille sur le CMS wordpress avec le plugin Ninja Forms. Je cherche à extraire les valeurs soumises dans le cadre d'un formulaire pour les restituer dans un tableau. L'auteur du plugins met à disposition une fonction pour récupérer toutes les valeurs d'un formulaire. Seulement cela se présente sous la forme d'un array complexe et là je bloque un peu. J'imagine un algorithme conditionnel assez complexe sur le papier mais je suis persuadé qu'il y a beaucoup plus simple.

Dans mon exemple de test. J'ai créé un formulaire à deux entrées : constructeur et modèle. Je l'ai soumis 3 fois (Peugeot, 206 ; Citroën, C4 ; Renault, Megane)

Mon objectif est de restituer :
Constructeur Modèle
Peugeot 206
Citroën C4
Renault Megane
Le array à mettre en forme est le suivant :
Array
(
[0] => Array
(
[id] => 6
[user_id] => 1
[form_id] => 3
[status] => 1
[action] => submit
[data] => Array
(
[0] => Array
(
[field_id] => 17
[user_value] => Renault
)

[1] => Array
(
[field_id] => 18
[user_value] => Megane
)

[2] => Array
(
[field_id] => 19
[user_value] =>
)

)

[date_updated] => 2014-04-28 09:59:55
)

[1] => Array
(
[id] => 5
[user_id] => 1
[form_id] => 3
[status] => 1
[action] => submit
[data] => Array
(
[0] => Array
(
[field_id] => 17
[user_value] => Citroën
)

[1] => Array
(
[field_id] => 18
[user_value] => C4
)

[2] => Array
(
[field_id] => 19
[user_value] =>
)

)

[date_updated] => 2014-04-28 09:59:10
)

[2] => Array
(
[id] => 4
[user_id] => 1
[form_id] => 3
[status] => 1
[action] => submit
[data] => Array
(
[0] => Array
(
[field_id] => 17
[user_value] => Peugeot
)

[1] => Array
(
[field_id] => 18
[user_value] => 206
)

[2] => Array
(
[field_id] => 19
[user_value] =>
)

)

[date_updated] => 2014-04-28 09:58:06
)

)
On retrouve un système de tableau :
identifiant du champ => Nom du champ
valeur du champ => Valeur
plutot qu'une simple ligne :
Nom du champ => Valeur
C'est là que ça devient tordu pour moi car je dois extraire la valeur en fonction d'une autre valeur...

Je dois manquer d'imagination... #-o

Si vous pouvez m'aider ou me donner une piste de solution. A défaut de temps, si vous pouviez simplement me dire comment vous vous y prendriez... :priere:

Je vous remercie.

Ben

Eléphant du PHP | 422 Messages

28 avr. 2014, 11:06

hello

la boucle foreach est tres pratique pour parcourir les tableaux

exemple
foreach($tabForm as $key=>$tab){ //pour chaque tableau
    echo "tableau index $key <br />"."\n";
    foreach($tab['data'] as $t){ //$tab['data'] est un tableau
         print_r($t);
    }
}
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Madebyj
Invité n'ayant pas de compte PHPfrance

28 avr. 2014, 11:48

Merci telnes. Ton intervention m'a mis sur la piste.

Le résultat de ton code est l'affichage des tableaux de données. J'ai ajouté une condition ce qui donne :
Constructeur
Renault
Citroën
Peugeot

Modèle
Megane
C4
206
Avec le code suivant :
echo "Constructeur <br />"."\n";
foreach($sub_results as $key=>$tab){ //pour chaque tableau
    
    foreach($tab['data'] as $t){ //$tab['data'] est un tableau
if ($t['field_id'] == 17){
echo $t['user_value'];
echo "<br />";
}
    }
}
echo "<br />Modèle <br />"."\n";
foreach($sub_results as $key=>$tab){ //pour chaque tableau
    
    foreach($tab['data'] as $t){ //$tab['data'] est un tableau
if ($t['field_id'] == 18){
echo $t['user_value'];
echo "<br />";
}
    }
}
On peut maintenant imaginer facilement une fonction avec en argument l'identifiant du champ.

Je me lance maintenant dans la mise en forme du tableau... je ne suis pas encore certain de comment je vais séparer ma liste. Je vais surement devoir traiter ligne par ligne plutôt que champ par champ... Je vous tiens au courant.

Madebyj
Invité n'ayant pas de compte PHPfrance

28 avr. 2014, 12:16

Donc voilà le code :
echo "<table border=\"1\">";
//entête du tableau
echo "<tr>";
echo "<th align=center>CONSTRUCTEUR</th>";
echo "<th align=center>MODELE</th>";
echo "</tr>";
//fin de l'entête

foreach($sub_results as $key=>$tab)
{
echo "<tr>";
foreach($tab['data'] as $t){

echo "<td align=center>".$t['user_value']."</td>";
}
echo '</tr>';
}
echo "</table>";
Ce qui donne un joli tableau, si quelqu'un trouve mieux je suis preneur :) Sujet Résolu.

Merci beaucoup !

Ben

JeanneG
Invité n'ayant pas de compte PHPfrance

05 juin 2014, 10:38

Bonjour
un grand merci pour avoir posté ce sujet car j'étais dans le même cas et ça m'aide beaucoup.
Mais quelle requête faut-il lancer ? car un message me dit "invalide argument" dans "foreach"
merci par avance,
Jeanne