我有多个嵌套的产品类别,我需要在管理系统的选择框中进行选择。我使用以下函数生成一个多维数组,然后将其传递给codeigniter的form_dropdown函数。这将接受一个数组中的一个数组,但不接受数组中的另一个数组。如果数组顶层中的项是一个数组,它将生成一个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%,因为它将生成第一个代码片段,但我无法获得第二个代码片段。这是我的功能:
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
)
)
)
)
)
)
有什么想法吗?
您可能想要使用optgroup
标记:
<select>
<optgroup label="Swedish Cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
</optgroup>
<optgroup label="German Cars">
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</optgroup>
</select>
此外,你需要在那里复发。