2010-03-02 4 views
2

Un résultat de données est renvoyé à partir de ma base de données avec plusieurs lignes. Le problème que j'ai est que je n'ai besoin que d'une seule ligne pour certains éléments et plusieurs lignes pour les autres et sans faire plusieurs requêtes de base de données pour chaque élément nécessaire, je pensais reconstruire le tableau de données. Ce que je suis finalement après est d'utiliser chaque élément de la matrice comme une chaîne. Si les deux derniers éléments, le produit et l'emplacement ont plusieurs lignes, j'ai besoin de les renvoyer en tant que chaînes.Recherche d'un moyen plus simple de reconstruire ce tableau

Quelle serait la meilleure façon de gérer cela?

Array 
(
    [0] => Array 
     (
      [cid] => one line 
      [model] => one line 
      [mfgr] => one line 
      [color] => one line 
      [orderid] => one line 
      [product] => many lines 
      [location] => many lines 
     ) 
    [1] => Array 
     (
      .. repeats for as many rows as were found 
     ) 
) 

Permettez-moi de reformuler cette question. Le tableau que vous voyez ci-dessus est le tableau qui est produit à partir de mon foreach. La clé de tableau [0] contient toutes les données de mon résultat. La clé de tableau [1] répète simplement les données. J'ai besoin de lignes simples pour les colonnes 1-5. Les colonnes 6 & 7 sont où j'ai besoin de plusieurs lignes, d'où les clés de tableau récurrentes.

Si je devais refaire ce tableau de cette façon que j'ai besoin, il ressemblerait à quelque chose comme ceci:

Array 
(
    [single] => Array 
     (
      [cid] => one line 
      [model] => one line 
      [mfgr] => one line 
      [color] => one line 
      [orderid] => one line 

      [product] => Array 
       (
        [0] => many lines 
        [1] => many lines 
      ) 
      [location] => Array 
       (
        [0] => many lines 
        [1] => many lines 
      ) 
     ) 
) 

Répondre

1

Le genre de regroupement que vous voulez faire est le genre de chose les bases de données font le mieux. Rechercher la documentation MySQL pour GROUP_CONCAThere.

+0

Hmm .. Cela semble être une solution viable et probablement la meilleure façon de le gérer. Si j'utilise group_concat, je ne perdrai pas les lignes où je n'ai besoin que d'une seule ligne, n'est-ce pas? Je pense que cette fonction ne renvoie qu'une seule ligne pour une raison quelconque. Bien sûr, je vais regarder les docs. – jim

+0

Oui. Tu avais raison Matjis. Je vous remercie. – jim

1

Si je comprends ce que vous avez besoin, voici comment

foreach($array as $key => $value) { 
    if(is_array($value['product'])) { 
    $array[$key]['product'] = implode(', ', $value['product']); 
    } 

    if(is_array($value['location'])) { 
    $array[$key]['location'] = implode(', ', $value['location']); 
    } 
} 

Cela tournera « plusieurs lignes » en product et location en une seule chaîne par des virgules.

+0

Merci Michael. Je crois que c'est ce que je cherche. – jim

+0

Michael, comment limiter une seule ligne pour chacune des 5 premières colonnes? Rappelez-vous, je vais récupérer le nombre maximum des deux dernières colonnes et cela signifie que les 5 premières lignes seront des doublons. – jim

+0

Michael, désolé. Cela ne fonctionne pas car $ value ['product'] n'est pas un tableau. J'ai cependant révisé ma question si cela vous aide. – jim

Questions connexes