0

我在CodeIgniter (CI)工作,并尝试为下拉列表创建一组嵌套的类别项。要创建下拉框,在CI中您需要echo form_dropdown('name', $array, $selectedID).

这是我创建嵌套列表数组的函数:

$categoryData = array();
function list_categories($cats, $sub = ''){
    foreach($cats as $cat){

        //$cat['category']->id = $sub.$cat['category']->title;
        $categoryData[$cat['category']->id] = $sub.$cat['category']->title;

        if( sizeof($cat['children']) > 0 ){
            $sub2 = str_replace('—→ ', '–', $sub);
            $sub2.= '–→ ';
            list_categories($cat['children'], $sub2);
        }
    }
}

如果我在函数内部执行一个var_dump($categoryData);foreach它将list_categories()返回嵌套集的数组。所以var_dump()在函数内部使用时这是可以的。但我需要这样做:

<?php
    list_categories($categories);
    var_dump($categoryData);
?>

在这里我得到一个空数组,这是一个输出:

array (size=0)
  empty

有人可以告诉我我在这里做错了什么吗?

4

2 回答 2

3

您的函数修改了本地副本,应将其返回到全局范围。您想要实现的目标可能是使用globals(“不良做法”)returnreferences.

尝试使用references

function list_categories(&$result, $cats, $sub = ''){    // <- THIS
    foreach($cats as $cat){

        //$cat['category']->id = $sub.$cat['category']->title;
        $result[$cat['category']->id] = $sub.$cat['category']->title; // <- THIS

        if( sizeof($cat['children']) > 0 ){
            $sub2 = str_replace('&mdash;&rarr;&nbsp;', '&ndash;', $sub);
            $sub2.= '&ndash;&rarr;&nbsp;';

            list_categories($result, $cat['children'], $sub2); // <- THIS
        }
    }
}

$categoryData = array();

list_categories($categoryData, $categories); // <- THIS

UPD:最后,对于递归函数,引用更好(对我来说)。很抱歉给您带来不便。

于 2013-05-15T07:04:36.273 回答
0

你应该:

function list_categories($cats, $sub = ''){
global $categoryData;  // add this

如果你不这样做,函数就看不到全局 $categoryData 而是创建一个本地的。它不会返回。

请注意,建议尽量少使用全局变量以避免 spagetthi 代码。

于 2013-05-15T07:11:32.053 回答