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