Recomposer un tableau multi-dimensionnel

kny
Eléphanteau du PHP | 47 Messages

29 mai 2012, 17:02

Bonjour!
Sous ce nom barbare voici ma problématique:

J'ai un tableau de cette structure:

Code : Tout sélectionner

Array ( [0] => Array ( [id] => 1 [content] => contentA ) [1] => Array ( [id] => 2 [content] => contentB ) )
Et mon but est de le recomposer de la sorte

Code : Tout sélectionner

Array ( [id] => Array ( [0] => 1 [1] => 2 ) [content] ( [0] => contentA [1] => contentB ) )
En soit, j'ai écrit cette function:

Code : Tout sélectionner

function getDatas () { $result_array = array(); $keys = array_keys ( $mymultiarray[0] ); foreach ( $mymultiarray as $rows ) { foreach ( $keys as $key ) { array_push ( $result_array[$key], $rows[$key] ); } } return $result_array;
Si j'ai écrit ce code, c'est parce que je n'ai pas trouvé de solution par le biais des méthodes natives de php, mais c'est probablement parce-que je ne l'ai pas vu, aussi quelqu'un aurait-il une autre solution? Un peu plus propre, parce que 3 foreach, dont 2 imbriqués...

En vous remerciant!

Eléphant du PHP | 100 Messages

29 mai 2012, 22:51

salut,

as tu essayer de faire un truc du genre :

Code : Tout sélectionner

$array = array(); as tu essayé de faire un while ($donnees = mysql_fetch_assoc($requete)) { array_push($array, array($donnees[' '], etc ...)); } return $array;
jespère que sa pourra t'aider

a+

Mammouth du PHP | 2278 Messages

30 mai 2012, 08:58

Un simple élément de solution simple:
<?PHP
function parcours ($tableau)
{
   $resultat = array();
   $nb_lignes = count ($tableau);
    foreach ($tableau as $ligne)
   {
      $content = $ligne['content'];
      $id = $ligne['id'];
      print "<br>$id $content";
   }
  }
$tableau =
array
    (
        array
            (
                "id" => 1,
                "content" => "contentA"
            ),
        array
            (
                "id" => 2,
                "content" => "contentB"
            )
    );
print_r($tableau);
parcours($tableau);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

kny
Eléphanteau du PHP | 47 Messages

30 mai 2012, 13:48

> Bostak

Ta solution ne m'est pas accessible du fait que je puisse connaître à l'avance les clés du tableau, mais aussi du fait que je ne peux faire de requêtes.
Mon but est de partir d'un tableau et d'arriver à un nouveau tableau.

> Sirakawa

Je te remercie pour ta participation, mais cela ne répond malheureusement pas à mon souci.
Parcourir le tableau ne me pose pas de souci, et l'afficher non plus.
La problématique, vraiment, comme je l'ai souligné pour Bostak, est de partir d'un tableau dont les clés de second niveau peuvent être changeante, et le nombre d'entrées également, pour ré-obtenir un nouveau tableau, non plus architecturé par le nombre d'entrées mais par les clés...

Merci à vous tout de même!
Si vous avez cependant d'autres pistes, idées, avis, ils sont les bienvenue! :)

Mammouth du PHP | 2278 Messages

31 mai 2012, 09:59

Il est bien évident que dès lors que l'on parcourt un tableau, on est capable d'en construire un autre à partir des éléments trouvés:
Soit:
T1:
a1:11, a2:12, a3:13
b1:21,b2:22,,b3:23
lire a1:11 permet de constituer dans T2
T2[1][1] = "a1" et T2[2][1] = 11
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

kny
Eléphanteau du PHP | 47 Messages

31 mai 2012, 13:51

Je n'arrive semble-t-il pas à me faire comprendre.
Ma solution en l'état fonctionne.
Ce que je recherche, c'est s'il existe une solution/function toute prête de PHP pour effectuer ce que je demande.
Par exemple, pour fusionner deux tableaux, l'on peux écrire notre propre function, ou effectuer un array_merge.
Ma question est donc, existe-t-il un équivalent à ce code sous la forme d'une function in-the-box-by-php :D

ViPHP
AB
ViPHP | 5818 Messages

31 mai 2012, 18:40

Ce que je recherche, c'est s'il existe une solution/function toute prête de PHP pour effectuer ce que je demande.
Clairement non.
Par exemple, pour fusionner deux tableaux, l'on peux écrire notre propre function, ou effectuer un array_merge.
Ou encore utiliser l'opérateur + (faut pas l'oublier car cela peut-être utile pour un comportement différent de array_merge)

Bah sinon pour ton code du moment qu'il est fonctionnel... On pourrait éventuellement chercher à faire mieux (pas certain que cela soit facile) mais uniquement si ton tableau est très gros, sinon ça vaut pas le coup.

Mammouth du PHP | 2278 Messages

31 mai 2012, 19:00

on perdrait moins de temps:
Si j'ai écrit ce code, c'est parce que je n'ai pas trouvé de solution par le biais des méthodes natives de php, mais c'est probablement parce-que je ne l'ai pas vu, aussi quelqu'un aurait-il une autre solution? Un peu plus propre, parce que 3 foreach, dont 2 imbriqués...
Une autre solution ne signifie pas que ce qui est cherché est une fonction native ou un assemblage desdites...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

kny
Eléphanteau du PHP | 47 Messages

01 juin 2012, 13:27

Clairement non.
Cela me conforte donc.
Une autre solution ne signifie pas que ce qui est cherché est une fonction native ou un assemblage desdites...
Navré, je me suis mal exprimé dès le départ.

Je reste donc avec ma solution pour l'immédiat. Elle fonctionne et ne consomme pas énormément tant que l'on reste dans des tableaux qui ne sont trop imposants.
En vous remerciant.