0

サブカテゴリからカテゴリへのブレッドクラム情報をいくつかのレベルで取得するための再帰関数に取り組んでいます。この情報を取得することはできますが、この関数で配列の配列を返すと、内容を表示するために print_r を実行できません。

怒鳴る前にコードをお見せしましょう。

function breadcrumb_array ($id, $breadcrumb = array())  {
    $cat_info = get_subcat_data($id);
    if ($cat_info["parent_id"]>0) {
        $breadcrumb[] = $cat_info;
        breadcrumb_array($cat_info["parent_id"], $breadcrumb);
    } else {
        echo "About to return the value...";
        //print_r(array_reverse($breadcrumb)); 
        return array_reverse($breadcrumb);
    }
}
$breadcrumb = breadcrumb_array(8);
print_r($breadcrumb);

print_r(...)関数内でコメントを外すと、配列の配列が適切に表示されます。

( [0] => Array 
    ( [id] => 3
      [nombre] => Muebles
      [parent_id] => 1
      [parent_urlname] => 
      [parent_nombre] => Productos
    )
  [1] => Array
    ( [id] => 6
      [nombre] => Sillas
      [parent_id] => 3
      [parent_urlname] =>
      [parent_nombre] => Muebles
    )
  [2] => Array 
    (
      [id] => 8
      [nombre] => Sillas de cocina
      [parent_id] => 6
      [parent_urlname] => 
      [parent_nombre] => Sillas
    )
)

そのため、関数を呼び出した後、最後に print_r を実行すると、同じ配列の配列が出力されることが期待されます。しかし、私は何も得ません。関数内で問題が発生する可能性があるすべてをテストしたと思います。戻り値を出力するときに何が問題になるのか、私には本当にわかりません。手伝ってくれますか?

PS: 誰かがそれを必要とする場合、get_subcat_id()関数は次のようになります:

//Retrieves mroe info about a certain categories and its parent
function get_subcat_data ($id) {
    global $connection;
    $query =    "SELECT tblCategoria.id, tblCategoria.nombre, tblCategoria.parent_id, tblParents.urlname AS parent_urlname, tblParents.nombre AS parent_nombre
                FROM tblCategoria JOIN tblCategoria AS tblParents ON tblCategoria.parent_id = tblParents.id
                WHERE tblCategoria.id = {$id}
                LIMIT 1";
    $cats1 = mysql_query($query, $connection);
    confirm_query($cats1);
    $cats1 = mysql_fetch_assoc($cats1);
    return $cats1; 
}
4

4 に答える 4

1

コードの問題は、再帰ループ内で実行すると、現在のブレッドクラムが期待どおりに表示されることだと思います。print_rしかし、外部から実行すると、再帰性のチェーンから実際には何も返されないため、そうはなりません (関数の呼び出しを行っていますが、最後の呼び出しを返していません)。再帰関数を返してみてください:

function breadcrumb_array ($id, $breadcrumb = array())  {
    $cat_info = get_subcat_data($id);
    if ($cat_info["parent_id"]>0) {
        $breadcrumb[] = $cat_info;

        // HERE
        return breadcrumb_array($cat_info["parent_id"], $breadcrumb);
    } else {
        return array_reverse($breadcrumb);
    }
}
于 2013-08-04T02:25:01.513 に答える