Wie füge ich
$data = array ( 0 => array ( 'id' => '1', 'name' => 'WEB编程', 'parentid' => '0', ), 1 => array ( 'id' => '2', 'name' => 'PHP', 'parentid' => '1', ), 2 => array ( 'id' => '3', 'name' => 'Ajax', 'parentid' => '1', ), 3 => array ( 'id' => '4', 'name' => 'java', 'parentid' => '1', ), 4 => array ( 'id' => '5', 'name' => 'WinForm编程', 'parentid' => '0', ), 5 => array ( 'id' => '6', 'name' => 'VB', 'parentid' => '5', ), 6 => array ( 'id' => '7', 'name' => 'VC', 'parentid' => '5', ), );
Mit einem solchen Array möchte ich den folgenden Effekt erzielen.
<select name="categorys"> <optgroup label="WEB编程"> <option value="2" >PHP</option> <option value="3" >Ajax</option> <option value="4" >java</option> </optgroup> <optgroup label="WinForm编程"> <option value="6" >VB</option> <option value="7" >VC</option> </optgroup> </select>
Die Schwierigkeit besteht darin, festzustellen, ob
$data = array ( 0 => array ( 'id' => '1', 'name' => 'WEB编程', 'parentid' => '0', ), 1 => array ( 'id' => '2', 'name' => 'PHP', 'parentid' => '1', ), 2 => array ( 'id' => '3', 'name' => 'Ajax', 'parentid' => '1', ), 3 => array ( 'id' => '4', 'name' => 'java', 'parentid' => '1', ), 4 => array ( 'id' => '5', 'name' => 'WinForm编程', 'parentid' => '0', ), 5 => array ( 'id' => '6', 'name' => 'VB', 'parentid' => '5', ), 6 => array ( 'id' => '7', 'name' => 'VC', 'parentid' => '5', ), ); echo '<select name="categorys">'; foreach($data as $v) { if($v['parentid'] == 0) echo "<optgroup label='$v[name]'>"; else echo "<option value='$v[id]' >$v[name]</option>"; } echo '</select>';
Nörgelnder Bruder, deiner obigen Operation fehlt immer noch das Endzeichen
Ich frage mich nur, wie ich das hinzufügen soll .
echo "<optgroup label='$v[name]'>$v[name]</optgroup>";
Ändern Sie es einfach ein wenig.
$data = array ( 0 => array ( 'id' => '1', 'name' => 'WEB编程', 'parentid' => '0', ), 1 => array ( 'id' => '2', 'name' => 'PHP', 'parentid' => '1', ), 2 => array ( 'id' => '3', 'name' => 'Ajax', 'parentid' => '1', ), 3 => array ( 'id' => '4', 'name' => 'java', 'parentid' => '1', ), 4 => array ( 'id' => '5', 'name' => 'WinForm编程', 'parentid' => '0', ), 5 => array ( 'id' => '6', 'name' => 'VB', 'parentid' => '5', ), 6 => array ( 'id' => '7', 'name' => 'VC', 'parentid' => '5', ), ); $tempArray = array(); foreach($data as $item){ $tempArray[$item['parentid']][$item['id']] = $item['name']; } echo '';
Aus Angst vor schlechter Effizienz weiß ich nicht, ob es eine andere Methode gibt.
Wenn Sie das Array wiederholen...
$data = array ( array ( 'id' => '1', 'name' => 'WEB编程', 'parentid' => '0', 'sub'=> array( array( 'id' => '2', 'name' => 'PHP', 'parentid' => '1', ), array ( 'id' => '3', 'name' => 'Ajax', 'parentid' => '1', ), array ( 'id' => '4', 'name' => 'java', 'parentid' => '1', ) ) ), array ( 'id' => '5', 'name' => 'WinForm编程', 'parentid' => '0', 'sub'=> array( array ( 'id' => '6', 'name' => 'VB', 'parentid' => '5', ), array ( 'id' => '7', 'name' => 'VC', 'parentid' => '5', ) ) ) ); echo '<select style="width:200px;">'; for($i=0,$il=count($data);$i<$il;$i++){ echo '<optgroup label="'.$data[$i]['name'].'">'; for($j=0,$jl=count($data[$i]['sub']);$j<$jl;$j++){ echo '<option>'.$data[$i]['sub'][$j]['name'].'</option>'; } echo '<optgroup>'; } echo '</select>';
Wirklich?
Oh, es fehlt ein
Aber als ich den Code getestet habe, habe ich keinen Unterschied gespürt, ob ich ihn habe oder nicht.
Wenn es da sein muss, Fügen Sie einfach einen Schalter hinzuVariable. Warum müssen wir mehrmals Rad fahren?
echo '<select name="categorys">'; $k = false; foreach($data as $v) { if($v['parentid'] == 0) { echo "<optgroup label='$v[name]'>"; $k = true; }else { if($k) echo '</optgroup>'; echo "<option value='$v[id]' >$v[name]</option>"; $k = false; } } echo '</select>';
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das