PHP & JavaScript Room :: 設置サンプル

実行結果

ソース

<?
/* [関数名] 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($fpfilesize($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>

polarized women