[英]Dynamically Generating Select OptGroup Options in PHP
我有一個如下數組,我想構建一個Select DropDown的嵌套選項
array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '5',
'name' => 'Mud',
'parent_id' => '0'
),
'children' => array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '6',
'name' => 'Sand',
'parent_id' => '5'
),
'children' => array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '7',
'name' => 'Soil',
'parent_id' => '6'
),
'children' => array()
)
)
)
)
),
(int) 1 => array(
'ProductCategory' => array(
'id' => '8',
'name' => 'House',
'parent_id' => '0'
),
'children' => array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '9',
'name' => 'Door',
'parent_id' => '8'
),
'children' => array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '11',
'name' => 'Latch',
'parent_id' => '9'
),
'children' => array()
),
(int) 1 => array(
'ProductCategory' => array(
'id' => '12',
'name' => 'Glass',
'parent_id' => '9'
),
'children' => array(
(int) 0 => array(
'ProductCategory' => array(
'id' => '13',
'name' => 'Semi ',
'parent_id' => '12'
),
'children' => array()
)
)
)
)
),
(int) 1 => array(
'ProductCategory' => array(
'id' => '10',
'name' => 'Window',
'parent_id' => '8'
),
'children' => array()
)
)
)
)
我正在尋找一種有效的循環方式並創建HTML代碼,如下所示。 我不確定它會有多少級別。 所以我需要一個證明循環。
<select>
<optgroup label="Level One">
<option> A.1 </option>
<optgroup label="Level Two">
<option> A.B.1 </option>
</optgroup>
<option> A.2 </option>
</optgroup>
</select>
通過下拉列表嵌套查看的示例
News
--Sport
----Sky
----Football
------Football-1
--War
----War1
--tech
Article
--tech
----tech2
------tech3
--php
--linux
來自CI表格助手:
function form_dropdown($name = '', $options = array(), $selected = array(), $extra = ''){
if ( ! is_array($selected))
{
$selected = array($selected);
}
// If no selected state was submitted we will attempt to set it automatically
if (count($selected) === 0)
{
// If the form name appears in the $_POST array we have a winner!
if (isset($_POST[$name]))
{
$selected = array($_POST[$name]);
}
}
if ($extra != '') $extra = ' '.$extra;
$multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
$form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
foreach ($options as $key => $val)
{
$key = (string) $key;
if (is_array($val) && ! empty($val))
{
$form .= '<optgroup label="'.$key.'">'."\n";
foreach ($val as $optgroup_key => $optgroup_val)
{
$sel = (in_array($optgroup_key, $selected)) ? ' selected="selected"' : '';
$form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
}
$form .= '</optgroup>'."\n";
}
else
{
$sel = (in_array($key, $selected)) ? ' selected="selected"' : '';
$form .= '<option value="'.$key.'"'.$sel.'>'.(string) $val."</option>\n";
}
}
$form .= '</select>';
return $form;
}
例:
<?php
$options = Array(
"value1" => "label1",
"value3" => "label2",
"value3" => "label3"
);
echo form_dropdown("my_field_name",$options,"value2","class='the_class_of_my_obj'");
?>
例2:
<?php
$options = Array(
Array(
"value1.1" => "label 1.1",
"value1.2" => "label 1.2"
),
"value3" => "label2",
"value3" => "label3"
);
echo form_dropdown("my_field_name",$options,"value2","class='the_class_of_my_obj'");
?>
沒有解決方案在select
標簽中使用multilevel deep(HTML限制)。
但是你可以使用HtmlHelper::nestedList();
沒有optgroup
情況下構建簡單的下拉列表HtmlHelper::nestedList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.