Regrouper données tableau

Eléphant du PHP | 100 Messages

07 oct. 2013, 20:42

Bonjour à tous,

Je rencontre un petit soucis que je vais vous exposer voici mes données :
$this->test1['sorts'] = $name;
$this->test2['toto'] = $encodingName;
Sachant que $name et $encodingName sont des tableaux associatifs du genre 0 => 'toto', 1 => 'tata', ect...
Ce que j'aimerais faire c'est regrouper toutes mes données dans $this->test1['sorts'], pour pouvoir accéder (dans mon cas dans twig) aux données du tableau sorts en bouclant dessus et en ayant une sortie du style : {{ sort.name }} et {{ sort.encodingName }}, cela fonctionne très bien séparément mais je voudrais regrouper les données dans le même tableau, comment puis-je procéder ?
Petite précision, sachant que les lignes du tableau 1 ($name) et du tableau 2 ($encodingName) correspondent respectivement au nom brut et au nom formaté.

Cordialement,

ViPHP
ViPHP | 928 Messages

07 oct. 2013, 22:51

A moins que jai mal compris
array_merge($tableau1, $tableau2)
va fusionner les deux tableaux.

Eléphant du PHP | 100 Messages

08 oct. 2013, 00:00

Un array merge ne convient pas, je me suis peut être mal exprimé le rendu que je souhaite est le suivant :
je veux que $this->test1['sort'] contiennent les valeurs respectives des deux tableaux $name et $encodingName et que celle-ci correspondent en gros voilà le résultat attendu :

name encodingName
un deux un-deux
coucou toi coucou-toi
merci de l'aide merci-de-l-aide

et lorsque je vais faire mon foreach ($this->test1['sort'] as data) je puise afficher les valeurs respectives de la façon suivante :
data['name'] et data['encodingName'] afficheront le résultat suivant pour le premier passage de la boucle :
un deux et un-deux

Bien cordialement,

ViPHP
ViPHP | 928 Messages

08 oct. 2013, 00:14

Tes tableaux $name et $encodingName ont la même longueur ? Les valeurs sont respectivement déjà triées dans le bon ordre ?
Par exemple $name[1] et $encodingName[1] contiennent leurs valeurs équivalentes ?

Eléphant du PHP | 100 Messages

08 oct. 2013, 00:27

Oui tout à fait ils ont la même longueur et sont respectivement déjà triées dans le bon ordre.

Bien cordialement,

ViPHP
ViPHP | 928 Messages

08 oct. 2013, 00:33

Dans ce cas normalement ça devrait marcher ça :
$sorts = array();
for ($i = 0, $total = count($name); $i < $total; $i++)
{
   $sorts[] = array('name' => $name[$i], 'encodingName' => $encodingName[$i]);
}
Et ensuite il suffit de passer le tableau à twig :
return $this->render('...', array(
   'sorts' => $sorts,
));
Et dans la vue twig :

Code : Tout sélectionner

{% for sort in sorts %} {{ sort.name }} :: {{ sort.encodingName}} {% endfor %}
++

Eléphant du PHP | 100 Messages

08 oct. 2013, 00:37

effectivement je n'avais pas pensé à cela mais j'aurais pensé qu'il y avait un truc d'un peu plus "fun" pour le faire

Bien cordialement,

Eléphant du PHP | 100 Messages

08 oct. 2013, 00:44

Après réflexion et d'après ce que vous m'avez montré voici la solution idéale (du moins je pense) :

http://www.php.net/manual/fr/function.array-combine.php

Bien cordialement,

ViPHP
ViPHP | 928 Messages

08 oct. 2013, 00:50

Effectivement ça marche aussi et c'est mieux, par contre ça sera sous forme de clef => valeur.

++

Eléphant du PHP | 100 Messages

08 oct. 2013, 01:04

Enfaite cette solution ne va pas ! car moi je cherche à regrouper seulement le "value" des deux tableaux.

Bien cordialement,