1

私はZend Frameworkにかなり慣れていないため、次の問題の例を見つけることなく何日も検索しました:

以下のコードから達成しようとしている結果は、メインのカテゴリの下に一致するサブカテゴリがあり、すべてのメインのカテゴリをループするリストです。

例:

家電(メインカテゴリー)

  • 電子レンジ
  • ストーブ

エレクトロニクス(メインカテゴリー)

  • コンピューター
  • 無線

コードは次のとおりです(これも方法がわかりません。私の思考プロセスは、最初の選択からメインカテゴリIDを取得して、ネストされたを実行することでした)foreach()foreach()

// Get  Categories with Sub Categories

$catid = 0;

$selectmain = $this->dbhInstance->select()
                                ->from(array('a' => 'code_sub_category'), 
                                       array('b.id as mainid', 'b.site_category'))
                                ->join(array('b' => 'site_categories'), 
                                       'b.id = a.site_category_id')
                                ->group("b.id")
                                ->order("b.site_category");

$selectsub = $this->dbhInstance->select()
                               ->from(array('a' => 'code_sub_category'), 
                                      array('a.id as subid', 'a.sub_category', 'a.site_category_id'))
                               ->join(array('b' => 'site_categories'), 
                                      'b.id = a.site_category_id')
                               ->where("a.site_category_id = '" . $catid . "'")
                               ->order("a.sub_category");

$fetch = $this->dbhInstance->fetchAll($selectmain);
$fetch2 = $this->dbhInstance->fetchAll($selectsub);
//var_dump($fetch2);

$items = array();
$items2 = array();

foreach ($fetch as $key => $value) {
    $catid = $value['id'];
    $items = array_merge($items, array($key => $value));

    foreach ($fetch2 as $key => $value) {
        $items = array_merge($items, array($key => $value));
    }

    $this->view->getsubcategories = $items;
}

$this->view->getmaincategories = $items;
//End FULL Categories for My Categories
4

1 に答える 1

0

これを試すことができますか:

$selectCat = $this->dbhInstance->select()
                            ->from(array('c' => 'site_categories'), array('c.id as id', 'c.site_category as text, 0 as parent'))
                            ->order('c.site_category');

$selectSubCat = $this->dbhInstance->select()
                            ->from(array('sc' => 'code_sub_category'), array('sc.id as id', 'sc.sub_category as text', 'sc.site_category_id as parent')
                            ->order('sc.sub_category');

$select =   $this->dbhInstance->select()->union(array($selectCat, $selectSubCat));

$statement = $this->dbhInstance->query($select);

$items = array();
$childs = array();

while( $row = $statement->fetch() ) {
     $items[] = (object)array(
    'id' => $row['id'],
    'text' => $row['text'],
    'parent' => $row['parent'],
    'item' => array()
);
}

foreach($items as $item)
$childs[$item->parent][] = $item;

foreach($items as $item) if (isset($childs[$item->id]))
$item->item = $childs[$item->id];

if( !isset($childs[0]) ) $this->view->getmaincategories = $getmaincategories = array();
else 
$this->view->getmaincategories = $getmaincategories = $childs[0];

// Display the result 
Zend_Debug::dump($getmaincategories);

結果は、次のようなオブジェクトの配列になります。

array(
'Appliances' => array(
    'Microwave',
    'Stove'
),
'Electronics' => array(
    'Computer',
    'Radio'
)
)

この助けを願っています!

よろしく、アーメド。

于 2012-10-10T15:41:02.813 に答える