こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列からプルダウン用のHTMLを生成

配列からプルダウン用のHTMLを生成するプログラムを作成しています。

結果としては
<option value="tomato">トマト</option>
<option value="onion">たまねぎ</option>
<option value="carrot">にんじん</option>
のHTMLが生成されるようにしたいのです。
(実際の画面表示はプルダウンになっています)


function createDropDownListByArray($key, $val ) {
  $array_name = array(
   $key => $val,
  );

  foreach( $array_name as $key => $val ){
$tag .= '<option value="' . $key . '">' . $val . '</option>' . "\n";
  }
  return $tag;
}

上記のようにつくってみましたが、この場合ファンクションを呼び出すと
1つずつしかHTMLを生成できません。 
再度ファンクションを呼び出すと、上書きされてしまいます。(当たり前ですが)
可変引数?(func_get_args())を使えないかとも思いましたが、できませんでした。
上記のように一度に全ての結果を表示したい場合、どのような記述に変えたらいいでしょうか?

詳しい方、どうか教えてください。
よろしくお願いします。

投稿日時 - 2007-09-18 13:45:37

QNo.3355669

すぐに回答ほしいです

質問者が選んだベストアンサー

createDropDownListByArray($key, $val )
この関数を呼んだ場合に生成される配列は
array($key => $val)になってますので
当然一組のoptionしか作られませんよね?

一番簡単な方法としては、他の方が回答されているように
関数に渡す引数を配列にするのが一番かと。

分かりやすく書くとこんな感じかな。
$fruit = createDropDownListByArray(array('tomato' => 'トマト', 'carrot' => 'ニンジン'));

で、関数の方も
function createDropDownListByArray(&$array_name) {
に修正して、
$array_name = array(
 $key => $val,
);
を削除すれば希望通りの動きになると思いますよ。

投稿日時 - 2007-09-18 17:17:46

お礼

丁寧なご回答ありがとうございます。
私自身が少し内容を勘違いしていたようで
お二人に教えていただいた方法で無事動きました。

とても助かりました。
どうもありがとうございました。

投稿日時 - 2007-09-18 18:34:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

どういった動きをさせたいのか不明ですが、こんなんでいけます。
引数の数変えちゃマズいのでしょうか?

<?php
function createDropDownListByArray(&$list) {
$array_name = $list;

foreach( $array_name as $key => $val ){
$tag .= '<option value="'.$key.'">'.$val.'</option>'."\n";
}
return $tag;
}

$list = array("tomato" => "トマト", "onion" => "たまねぎ", "carrot" => "にんじん");

echo createDropDownListByArray($list);

Smartyを使っても出来ます。

クラス構造にして、追加・削除を場合に応じて行って、最終的にcreateするような
作りなら、そういう作りに書き換えないと、このままじゃ出来ません。

投稿日時 - 2007-09-18 14:05:36

お礼

早速のご丁寧な回答ありがとうございます。

ファンクションを呼び出すときに、直接値を指定したいため
例:$fruit = createDropDownListByArray("tomato", "とまと")

naktak様に教えていただいたやり方とは少し違うかな?といった感じです。

参考にさせていただきます。 ありがとうございます。
他にいい方法があれば、教えてくださればありがたいです。

投稿日時 - 2007-09-18 14:59:19