当前位置:Gxlcms > html代码 > 在循环里如何使用<optgroup>标签

在循环里如何使用<optgroup>标签

时间:2021-07-01 10:21:17 帮助过:15人阅读

如何在循环里插入<optgroup>?

  1. $data = array (
  2. 0 =>
  3. array (
  4. 'id' => '1',
  5. 'name' => 'WEB编程',
  6. 'parentid' => '0',
  7. ),
  8. 1 =>
  9. array (
  10. 'id' => '2',
  11. 'name' => 'PHP',
  12. 'parentid' => '1',
  13. ),
  14. 2 =>
  15. array (
  16. 'id' => '3',
  17. 'name' => 'Ajax',
  18. 'parentid' => '1',
  19. ),
  20. 3 =>
  21. array (
  22. 'id' => '4',
  23. 'name' => 'java',
  24. 'parentid' => '1',
  25. ),
  26. 4 =>
  27. array (
  28. 'id' => '5',
  29. 'name' => 'WinForm编程',
  30. 'parentid' => '0',
  31. ),
  32. 5 =>
  33. array (
  34. 'id' => '6',
  35. 'name' => 'VB',
  36. 'parentid' => '5',
  37. ),
  38. 6 =>
  39. array (
  40. 'id' => '7',
  41. 'name' => 'VC',
  42. 'parentid' => '5',
  43. ),
  44. );

这么一个数组,想得到下面的效果。

  1. <select name="categorys">
  2. <optgroup label="WEB编程">
  3. <option value="2" >PHP</option>
  4. <option value="3" >Ajax</option>
  5. <option value="4" >java</option>
  6. </optgroup>
  7. <optgroup label="WinForm编程">
  8. <option value="6" >VB</option>
  9. <option value="7" >VC</option>
  10. </optgroup>
  11. </select>

难点在于如何在foreach里判断把<option>包含在<optgroup>里,折腾了半天也没出办法。请高手指点如何完成。

  1. $data = array (
  2. 0 => array (
  3. 'id' => '1',
  4. 'name' => 'WEB编程',
  5. 'parentid' => '0',
  6. ),
  7. 1 => array (
  8. 'id' => '2',
  9. 'name' => 'PHP',
  10. 'parentid' => '1',
  11. ),
  12. 2 => array (
  13. 'id' => '3',
  14. 'name' => 'Ajax',
  15. 'parentid' => '1',
  16. ),
  17. 3 => array (
  18. 'id' => '4',
  19. 'name' => 'java',
  20. 'parentid' => '1',
  21. ),
  22. 4 => array (
  23. 'id' => '5',
  24. 'name' => 'WinForm编程',
  25. 'parentid' => '0',
  26. ),
  27. 5 => array (
  28. 'id' => '6',
  29. 'name' => 'VB',
  30. 'parentid' => '5',
  31. ),
  32. 6 => array (
  33. 'id' => '7',
  34. 'name' => 'VC',
  35. 'parentid' => '5',
  36. ),
  37. );
  38. echo '<select name="categorys">';
  39. foreach($data as $v) {
  40. if($v['parentid'] == 0)
  41. echo "<optgroup label='$v[name]'>";
  42. else
  43. echo "<option value='$v[id]' >$v[name]</option>";
  44. }
  45. echo '</select>';

唠叨大哥,你上面的操作还是缺了结束符啊</optgroup>

我就是在苦闷如何把这个</optgroup>加进去。

  1. echo "<optgroup label='$v[name]'>$v[name]</optgroup>";

稍微改下就行了。

  1. $data = array (
  2. 0 =>
  3. array (
  4. 'id' => '1',
  5. 'name' => 'WEB编程',
  6. 'parentid' => '0',
  7. ),
  8. 1 =>
  9. array (
  10. 'id' => '2',
  11. 'name' => 'PHP',
  12. 'parentid' => '1',
  13. ),
  14. 2 =>
  15. array (
  16. 'id' => '3',
  17. 'name' => 'Ajax',
  18. 'parentid' => '1',
  19. ),
  20. 3 =>
  21. array (
  22. 'id' => '4',
  23. 'name' => 'java',
  24. 'parentid' => '1',
  25. ),
  26. 4 =>
  27. array (
  28. 'id' => '5',
  29. 'name' => 'WinForm编程',
  30. 'parentid' => '0',
  31. ),
  32. 5 =>
  33. array (
  34. 'id' => '6',
  35. 'name' => 'VB',
  36. 'parentid' => '5',
  37. ),
  38. 6 =>
  39. array (
  40. 'id' => '7',
  41. 'name' => 'VC',
  42. 'parentid' => '5',
  43. ),
  44. );
  45. $tempArray = array();
  46. foreach($data as $item){
  47. $tempArray[$item['parentid']][$item['id']] = $item['name'];
  48. }
  49. echo '<select name="categorys">';
  50. foreach($tempArray[0] as $parentid=>$name){
  51. echo "<optgroup label=\"$name\">";
  52. foreach($tempArray[$parentid] as $id=>$name){
  53. echo "<option value=\"$id\" >$name</option>";
  54. }
  55. echo '</optgroup>';
  56. }
  57. echo '</select>';

只是foreach了三次怕效率较差,不知还没有有别的方法。

重做数组的话……

  1. $data = array (
  2. array (
  3. 'id' => '1',
  4. 'name' => 'WEB编程',
  5. 'parentid' => '0',
  6. 'sub'=>
  7. array(
  8. array(
  9. 'id' => '2',
  10. 'name' => 'PHP',
  11. 'parentid' => '1',
  12. ),
  13. array (
  14. 'id' => '3',
  15. 'name' => 'Ajax',
  16. 'parentid' => '1',
  17. ),
  18. array (
  19. 'id' => '4',
  20. 'name' => 'java',
  21. 'parentid' => '1',
  22. )
  23. )
  24. ),
  25. array (
  26. 'id' => '5',
  27. 'name' => 'WinForm编程',
  28. 'parentid' => '0',
  29. 'sub'=>
  30. array(
  31. array (
  32. 'id' => '6',
  33. 'name' => 'VB',
  34. 'parentid' => '5',
  35. ),
  36. array (
  37. 'id' => '7',
  38. 'name' => 'VC',
  39. 'parentid' => '5',
  40. )
  41. )
  42. )
  43. );
  44. echo '<select style="width:200px;">';
  45. for($i=0,$il=count($data);$i<$il;$i++){
  46. echo '<optgroup label="'.$data[$i]['name'].'">';
  47. for($j=0,$jl=count($data[$i]['sub']);$j<$jl;$j++){
  48. echo '<option>'.$data[$i]['sub'][$j]['name'].'</option>';
  49. }
  50. echo '<optgroup>';
  51. }
  52. echo '</select>';

是吗?
哦,是少了个 </optgroup>
不过我测试代码时并没有感觉出有与没有的差异

一定要有的话,就加个开关变量。要多次循环干什么?

  1. echo '<select name="categorys">';
  2. $k = false;
  3. foreach($data as $v) {
  4. if($v['parentid'] == 0) {
  5. echo "<optgroup label='$v[name]'>";
  6. $k = true;
  7. }else {
  8. if($k) echo '</optgroup>';
  9. echo "<option value='$v[id]' >$v[name]</option>";
  10. $k = false;
  11. }
  12. }
  13. echo '</select>';


以上就是在循环里如何使用<optgroup>标签的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行