【PHP】SELECTBOXを出力する関数

HTML

 PHPでselectboxを出力する関数を作りました。今までSELECTBOXを出力するたびにコードを書いていたので関数化したら使いやすくなりました。
 特別な処理は何もしておらずありきたりな関数ですが、よく使う関数なので、備忘録として載せておきます。(ramda版も作ったのですが、保守がしにくいのでこちらの方がおすすめです)

selectboxを出力するPHPサンプル

function select_box($options, $feeld, $value) {
	//optionsかfeeldがnullなら実行しない
	if ($options === null || $feeld === null) {
		return;
	}
	echo "<label for='$feeld'>" . PHP_EOL;
	echo "<select name='$feeld' id='$feeld' >" . PHP_EOL;
	foreach ($options as $key => $displayValue) {
		$selected = "";
		if ((string)$key === (string)$value) {
			$selected =" selected ";
		} 
		echo "<option value='$key' $selected >" . htmlspecialchars($displayValue) . "</option>". PHP_EOL;
	}
	echo '</select>' . PHP_EOL;
	echo '</label>' . PHP_EOL;
}

使い方は以下の通りです。

//連想配列で指定
const FOODS = [
	'APPLE' => 'りんご',
	'BANANA' => 'バナナ',
	'ORANGE' => 'オレンジ'
];
//関数の呼び出し
select_box(FOODS,'food_field',"BANANA");

//配列で指定
const COLORS = [ "RED","BLUE","YELLOW" ];
//関数の呼び出し
select_box(COLORS,'color_field',2);

出力結果はこんな感じです。

 当初の予定では連想配列を指定した時は、
PHP [‘APPLE’ => ‘りんご’] → HTML <option value=’APPLE’>りんご<option>
と出力。
 配列を指定した時には、
PHP [‘APPLE’] → HTML <option value=’APPLE’>APPLE<option>
と出力したいと思っていたのですが、PHPの仕様で
 PHP [0 => ‘APPLE’] //keyが数字で連番の連想配列

 PHP [‘APPLE’] //配列
の区別がつかず、配列を指定した際には、keyが数字となっています。

 ちなみに私はselectboxのonchangeイベントを多用するので、
   select_box_JS($options, $feeld, $value,$JS)
を引数としたバージョンも作り、使い分けています。

連想配列と配列を比較する

次のPHPプログラムを実行し比較しました。

const FOODS = [
	'APPLE' => 'りんご',
	'BANANA' => 'バナナ',
	'ORANGE' => 'オレンジ'
];
var_dump(FOODS);
//結果
array(3) { ["APPLE"]=> string(9) "りんご" ["BANANA"]=> string(9) "バナナ" ["ORANGE"]=> string(12) "オレンジ" }
const COLORS = [ "RED","BLUE","YELLOW" ];
var_dump(COLORS);
//結果
array(3) { [0]=> string(3) "RED" [1]=> string(4) "BLUE" [2]=> string(6) "YELLOW" }
const COLORS2 = [ 0=>"RED",1=>"BLUE",2=>"YELLOW" ];
var_dump(COLORS2);
//結果
array(3) { [0]=> string(3) "RED" [1]=> string(4) "BLUE" [2]=> string(6) "YELLOW" }

FOODSとCOLORS2 が連想配列、COLORS は配列です。
しかし、COLORS とCOLORS2 の出力結果は全く同じになっていますので、内部的には同じ形でデータを保管しているようです。
 いろいろなHPを確認しましたが、COLORS とCOLORS2の配列形式を判定してくれる関数が見つからなかったので、PHPでは「できない」と判断し、断念しました。
(もし区別がつくなら教えていただきたいです)