2012-04-30 7 views
2

期待される結果を得ていない私はこのようになりますデータベースを持っている:値は、foreachループに等しくない場合は、何かをやろうとしたが、

enter image description here

私が使用して、このメニューからツリーを生成することができます次のコード:

function generateCategoriesTree($parent, $menu_array, $result = NULL) 
{ 
    foreach($menu_array as $key => $value): 
     if ($value['parent'] == $parent): 
      $result .= '<li>'; 
      $result .= '<a href="#">' . $value['name'] . '</a>'; 
      $result .= '<ul>'; 
      $result .= $this->generateCategoriesTree($key, $menu_array); 
      $result .= '</li></ul>'; 
      endif; 
    endforeach; 

    return $result; 
} 
:ここ

foreach($categories->result_array() as $category): 
    $menu_array[$category['id']] = array('name' => $category['name'], 'parent' => $category['parent'], 'id' => $category['id']); 
endforeach; 

echo '<ul>'; 
echo $this->tasks->generateCategoriesTree(NULL, $menu_array); 
echo '</ul>'; 

とは、上記のコードは、呼び出す関数です

enter image description here

することになりました親カテゴリを取得している私の問題は、太字にするには:

それはこのようになります木を生成します。私のデータベースでは、親の行はNULLという親の列を持っています。私は大胆なスタイルを適用してif ($value['parent'] !== $parent)のようないくつかのことを試しましたが、うまくいきません。私は正直なところ、私の頭を包み込むことはできません。皆さんのお役に立てれば助かります。

答えて

2

親がNULLの場合は太字にします。 if-structureには通常括弧を使用するので、構文の使用についてはわかりません。

function generateCategoriesTree($parent, $menu_array, $result = NULL) 
{ 
    foreach($menu_array as $key => $value): 
     if ($value['parent'] == $parent): 
      $result .= '<li>'; 
      if($value['parent'] == NULL): 
       $result .= '<a class="BOLDCLASS" href="#">' . $value['name'] . '</a>'; 
      else: 
       $result .= '<a href="#">' . $value['name'] . '</a>'; 
      endif; 
      $result .= '<ul>'; 
      $result .= $this->generateCategoriesTree($key, $menu_array); 
      $result .= '</li></ul>'; 
      endif; 
    endforeach; 

    return $result; 
} 

もちろんの大胆なクラスBOLDCLASSを作るために、いくつかのスタイリングを使用する必要があります。

+0

奇妙な、私はこれを試して誓う。しかし、if($ value ['parent'] == NULL):文の直後にif($ value ['parent'] == $ parent)を追加したことに気付きました。しかし、はい、これは動作します!どうもありがとうございました! – dallen

0

トップレベルについては、これを試してみましたか?

if ($value['parent'] !== '') 

次に、レベルを解決したら、OR演算子を使用できます。

+1

トップレベルにするには値を ''にしてはいけませんか? – Zombaya

+0

私はこれを試しましたが、すべてが親を太字にして、ループを通って重複したカテゴリになります:http://snipt.org/uiKb4 http://i.imgur.com/5hJdb.png – dallen

+0

私は方法この状況を処理するのは、親アイテムのIDを保持する別の配列または文字列を生成することです。ツリー構築ループの親アイテムが配列または文字列アイテムと一致すると、CSSを設定してテキストを太字にします。 – Ryan

1

のパラメータを$menu_array$parentの前になるようにスワップします。だから、:

function generateCategoriesTree($menu_array, $parent = 0, $result = null) { ... } 

は、あなたのgenerateCategoriesTree関数内でパラメータの順序を変更することを忘れないでください、あなたの呼び出し元の関数では、あまりにも...

を呼び出します。

そしてgenerateCategoriesTree自体で:

$result .= $this->generateCategoriesTree($menu_array, $key); 

次に、単に$parent == 0をテストします大胆なスタイルを適用します。

関連する問題