2012-07-28 4 views
3

J'utilise une seule requête mysql pour créer un tableau multidimensionnel pour les résultats imbriqués (catégories et sous-catégories).php remplace les clés d'identificateur de tableau

Recherche

SELECT `categories`.`cat_title`, `subcategories`.`sub_cat_id`, `subcategories`.`sub_cat_title` 
FROM (`categories`) 
LEFT JOIN `subcategories` 
ON `subcategories`.`cat_id` = `categories`.`cat_id` 
ORDER BY `categories`.`cat_title 

Création de tableau multidimensionnel

$array = array(); 

foreach ($query->result_array() as $row): //query result as a pure array 
     $array[$row['cat_title']][] = $row['sub_cat_title']; 
endforeach; 

return $array; 

Les rendements des catégories ci-dessus et sous-catégories et leurs respectives.

Array ( 
    [Art] => Array ([0] => Graphic Design [1] => Painting) 
    [Literature] => Array ([0] => Science Fiction [1] => Poetry [2] => Fiction) 
    [Science] => Array ([0] => Environmental) 
) 

Est-il possible de remplacer les clés du tableau avec des données de requête comme l'ID sous-catégorie sub_cat_id? Par exemple

[Literature] => Array ([8] => Science Fiction [94] => Poetry [5] => Fiction) 

Répondre

2

Oui, il a mis dans la boucle:

$array[ $row['cat_title'] ][ $row['sub_cat_id'] ] = $row['sub_cat_title']; 

Mais, $array[$row['cat_title']] pourrait ne pas être encore défini, vous devez donc ajouter cette vérification préalable:

if(!isset($array[$row['cat_title']])) { 
    $array[$row['cat_title']] = array(); 
} 

Votre originale le code n'a pas besoin de cette vérification puisque $array[] ne génèrera pas de notifications/avertissements, mais lorsque vous essayez de définir une clé spécifique, cela générera un avis/avertissement si la variable n'est pas déjà décla rouge comme un tableau.

+0

Merci! C'était plus facile que je ne l'imaginais! 'cat_title' sera toujours défini, à la place je vérifie si des sous-catégories existent pour une catégorie et les affiche si elles existent. – CyberJunkie

+0

@CyberJunkie - Ça va marcher! Heureux je pourrais aider :) – nickb

+0

brillant! J'ai passé beaucoup de temps à essayer de comprendre. – CyberJunkie

1

Vous pouvez faire quelque chose comme ceci:

foreach($array as $key=>$val){ 
    unset($array[$key]); 
    $newKey = //New value 

    $array[$newKey] = $val]; 
} 
Questions connexes