【发布时间】:2014-11-12 21:13:07
【问题描述】:
我有多个嵌套的产品类别,我需要在我的管理系统中的选择框中选择这些。我正在使用以下函数生成一个多维数组,然后可以将其传递给 codeigniter 的form_dropdown function。这将接受一个数组中的一个数组,但不接受另一个数组。如果数组顶层中的项是数组,它将生成一个 optgroup 元素而不是一个 select 选项。查看此代码以获得进一步的解释:
$categories = array(
0 => "top level 1", //Generates an <option> element correctly
"sub level name" => array ( //Generates an <optgroup> element correctly
2 => "sub level 1",
"sub sub level name" = array( //Generates <option value="sub sub level name">Array</option>
3 => "sub sub level 1"
)
)
);
为了避免子子关卡生成不正确的选项元素,我需要它生成一个在它之前有 4 个   的子关卡,如下所示:
$categories = array(
0 => "top level 1", //Generates an <option> element correctly
"sub level name" => array ( //Generates an <optgroup> element correctly
2 => "sub level 1"
),
" sub sub level name" = array( //Generates an <optgroup> element correctly
3 => "sub sub level 1" //Generates an <option> element correctly
)
);
我不知道该怎么做。我认为我的代码已经完成了 95%,因为它将生成第一个代码 sn-p,但我无法获得第二个代码 sn-p。这是我的功能:
function createCategoryOptions($categories, $spacing = "", $top = true)
{
print_r($categories);
$options = array();
foreach ($categories as $key=>&$category)
{
if (array_key_exists('children', $category))
{
usort($category['children'], function($a, $b) {
return count($b) - count($a);
} );
if($top)
{
$options[$spacing.$category['product_category_title']] = createCategoryOptions($category['children'], $spacing." ", false);
}
else
{
//This is what generates sub sub levels incorrectly
$options[$spacing.$category['product_category_title']] = createCategoryOptions($category['children'], $spacing." ", false);
}
}
else
{
$options[$key] = $spacing.$category['product_category_title'];
}
}
return $options;
}
这里是一些输入到函数中的示例数据:
array
(
//Top Level
[14] => array
(
[product_category_id] => 14
[product_category_parent_id] =>
[product_category_title] => Daily Living
[children] => array
(
//Sub Level
[58] => array
(
[product_category_id] => 58
[product_category_parent_id] => 14
[product_category_title] => Daily Living : AJ Way
[children] => array
(
//Sub Sub level
[68] => array
(
[product_category_id] => 68
[product_category_parent_id] => 58
[product_category_title] => Daily Living : AJ Way : Coverdry
)
)
)
)
)
)
有什么想法吗?
【问题讨论】:
标签: php arrays codeigniter recursion