<?
/* [関数名] make_sel_opts
* [機 能] ファイルから連想配列を生成し、プルダウンを生成
* [説 明] カンマ区切りのCSVファイルから連想配列を生成し、
* その連想配列のキーを1グループとしてoptgroupタグで括る。
* そのキーの値である配列の値をoptionのtextとして生成した
* プルダウンのHTML文を返す。optionのvalueには'0'からの連番を振る。
* [引 数]
* @param string $filename CSVファイル名
* @param string $selected デフォルトで選択するインデックス番号(デフォルトは'0')
* @param string $funcChk OnChangeイベントなどを記述(デフォルトは'')
* [返り値]
* @return string $htm 生成されたHTML文
* エラーの場合はFALSEを返す
*/
function fmake_sel_opts($filename, $selected=0, $funcChk="") {
//初期化
$idx=0;
$htm="";
$listData=Array();
//ファイルの存在確認
if (!@file_exists($filename)) return false;
//ファイルからリストデータを配列に読み込む
$fp=@fopen($filename, "r");
while (!@feof($fp)) {
$dat=@fgetcsv($fp, filesize($filename), ",");
if(!$dat[0]) continue;
$listData[$dat[0]][]=$dat[1];
}
@fclose($fp);
if (!@is_array($listData)) return false;
$htm="<select ".$funcChk.">\n";
foreach ($listData as $k1=>$v1) {
if (@is_array($v1) && $v1[0]!="") {
/* グループ化 */
$htm.="<optgroup label='".$k1."'>\n";
foreach($v1 as $v2){
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "")." style='margin-left:1em;'>".$v2."</option>\n";
$idx++;
}
$htm.="</optgroup>\n";
}else{
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "").">".$k1."</option>\n";
$idx++;
}
}
$htm.="</select>\n";
return $htm;
}
?>
<form>
<?
$filename="/module/include/dat/food.csv";
$selected="1";
$funcChk="onChange=\"alert(this.value + '=' + this[this.selectedIndex].text)\"";
echo fmake_sel_opts($filename, $selected, $funcChk);
?>
</form>