プロが教えるわが家の防犯対策術!

配列からプルダウン用の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())を使えないかとも思いましたが、できませんでした。
上記のように一度に全ての結果を表示したい場合、どのような記述に変えたらいいでしょうか?

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

A 回答 (2件)

createDropDownListByArray($key, $val )


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

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

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

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

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

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

お礼日時:2007/09/18 18:34

どういった動きをさせたいのか不明ですが、こんなんでいけます。


引数の数変えちゃマズいのでしょうか?

<?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するような
作りなら、そういう作りに書き換えないと、このままじゃ出来ません。
    • good
    • 0
この回答へのお礼

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

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

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

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

お礼日時:2007/09/18 14:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!