私はサイトのナビゲーションを構築していますが、私の人生では再帰を理解できません。この設計を使用して、MySQLを介してすべてのデータを保存しています。
再帰がどのように機能するかについていくつかのリンクを読みましたが、理解するのが難しいので遅くなければなりません。私は何かを書こうとしました、そしてそれが私が本当に必要とするものにさえ近くないことを知っています、しかしそれは始まりです:
PDO
public function viewCategories()
{
$viewSQL = "SELECT * FROM categories";
try
{
$pdo = new PDO('mysql:host=localhost;dbname=store','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$categoryVIEW = $pdo->prepare($viewSQL);
$categoryVIEW->execute();
$array = $categoryVIEW->fetchAll(PDO::FETCH_ASSOC);
$categoryVIEW->closeCursor();
$json = json_encode($array);
return $json;
}
catch(PDOexception $e)
{
return $e->getMessage();
exit();
}
}
再帰
$return = json_decode($category->viewCategories(),true);
function buildNavigation($json)
{
foreach($json as $item)
{
if($item['category_id'] === $item['parent'])
{
print('<li>'.$item['category_name'].'</li>');
if($item['category_id'] === $item['parent'])
{
print('<li>match'.$item['category_name'].'</li>');
buildNavigation($json);
}
}
}
buildNavigation($return);
予想通り、これが条件に入ることはありません。これは知識を持っているのは良いことなので、私は自分でこれを理解しようとしましたが、それは私の精神的な能力を超えていると思います:(
見てくれてありがとう:)
アップデート
私はこれがすでに答えられていることを知っていますが、連想配列を構築するためにこれを行うことができる方法はありますか?私はここから入手したALMOSTが機能する関数で遊んでいますが、それは私が望まない余分な配列を追加します。
方法
private function buildCategories($array,$parent)
{
$result = array();
foreach($array as $row)
{
if($row['parent'] == $parent)
{
$result[$row['category_name']] = $this->buildCategories($array,$row['category_id']);
}
}
return $result;
}
$json = json_encode($this->buildCategories($array,NULL));
return $json;
これ欲しい:
{"reloading":{"components","presses and dies","tumblers & scales","tools & accessories","shotshell reloading"}
しかし、私が得るものはこれです:
{"reloading":{"components":[],"presses and dies":[],"tumblers & scales":[],"tools & accessories":[],"shotshell reloading":[]}