2014-05-21 14 views

Antwort

4

Sie benötigen Rekursivität. Erstellen Sie eine Funktion wie folgt aus (vorausgesetzt, Sie sind aktiv Aufzeichnungen verwenden):

function getCategoriesByParentId($category_id) { 
    $category_data = array(); 

    $category_query = $this->db->query("SELECT * FROM categories WHERE parent_category = '" . (int)$category_id . "'"); 

    foreach ($category_query->result() as $category) { 
     $category_data[] = array(
      'category_id' => $category->category_id, 
      'category_name' => $category->category_name, 
      'category_alias' => $category->category_alias, 
      'parent_category' => $category->parent_category 
     ); 

     $children = getCategoriesByParentId($category->category_id); 

     if ($children) { 
      $category_data = array_merge($children, $category_data); 
     }   
    } 

    return $category_data; 
} 

und nennen Sie es wie folgt aus:

$all_categories = getCategoriesByParentId(0); 

Der Ausgang wird so aussehen:

Array 
(
    [0] => Array 
     (
      [category_id] => 14 
      [category_name] => s3 
      [category_alias] => s3 
      [parent_category] => 13 
     ) 

    [1] => Array 
     (
      [category_id] => 13 
      [category_name] => Samsung 
      [category_alias] => samsung 
      [parent_category] => 12 
     ) 

    [2] => Array 
     (
      [category_id] => 12 
      [category_name] => Phone 
      [category_alias] => phone 
      [parent_category] => 0 
     ) 

) 

Für weitere Informationen Dies wurde aus OpenCart 1.5.4, Klasse ModelCatalogCategory unter catalog\model\catalog\category.php entnommen.

+0

B E A Unvollständige Codierung @ Maschinen-Addict –

1

Angenommen, Sie haben diese in einem Array, müssen Sie eine rekursive Schleife verwenden.

// Information from database loaded into array 
$array = array(
    0 => array(
     'category_id'  => 12, 
     'category_name'  => 'Phone', 
     'category_alias'  => 'phone', 
     'parent_category' => 0 
    ), 
    // ... other rows 
); 
$children = array(); // Will contain all our children and grandchildren 

function FindChildrenAndGrandchildren(array $array, $parentId, $level = 0) { 
    $children = array(); 
    foreach($array as $category) { 
     if($category['parent_category'] == $parentId) { 
      if($level == 0) { 
       $temp = FindChildrenAndGrandchildren($array, $category['category_id'], 1); 
       $category['children'] = $temp; 
      } 
      $children[] = $category; 
     } 
    } 
    return $children; 
} 

$children = FindChildrenAndGrandchildren($array, 12); // Start search 
+0

Aber wo ist die SQL-Abfrage? – machineaddict

+0

@machineaddict wirklich? Sie können keine SQL-Abfrage schreiben, um die Daten zu erfassen? – Styphon