MySQL4.025をSELECTで読み込み多次元配列を作成し、これをテンプレートで吐き出しています。

例えば都道府県テーブルの場合、テンプレートでは・・・

<select name="address_01">
<option value="1">北海道</option>
<option value="2">青森県</option>
<option value="3">岩手県</option>
</select>

これを、

<select name="address_01">
<option value="-">▽都道府県を選択</option>
<option value="1">北海道</option>
<option value="2">青森県</option>
<option value="3">岩手県</option>
</select>

のように、一行挿入したいのです。
多次元配列を作る際、もしくは、配列を作成した後に一行挿入を行いたいのですが、どのようにすればよろしいでしょうか?
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/04/25 18:19:31
  • 終了:2007/04/26 02:10:14

ベストアンサー

id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/04/25 20:33:44

ポイント30pt

先頭に追加なら

array_unshift( $address_01,array("-","▽都道府県を選択") );

array_unshift

http://jp.php.net/manual/ja/function.array-unshift.php

id:seadwell

いつも、回答ありがとうございます。

今回教えていただいたarray_unshiftという関数の手がかりができましたので、早速調べて試してみました。


多次元配列に2件のダミーデータを作成し、var_dump($address_01);で中を見てみますと以下のようになります。

array(2) { [1]=> string(14) "北海道" [2]=> string(12) "青森県" }


そして、教えていただいたarray_unshiftを掛け中を除いてみますと、

array(3) { [0]=> array(2) { [0]=> string(1) "-" [1]=> string(18) "▽カテゴリーを選択" } [1]=> string(14) "北海道" [2]=> string(12) "青森県" }

のようになっていました。

添え字[0]が新たに作成され、その中に配列が入っています。


そこでいろいろ調べてみましたら、array_unshiftは添え字配列の解説はなされているのですが、多次元配列や連想配列に関してのデーター挿入は見つけることができませんでした。

今回は、偶然ID_Noがvalue値になっていて、かつ、ID_Noが順番に並んでいるので、

array_unshift( $address_01,"▽都道府県を選択");でも

添え字として[0]が振られることで問題ありませんが、仮に多次元配列でKEYをvalueにしたい場合、value値が数字とは限りません。

また、array_unshiftを使うと添え字が[0]から振りなおされるとも書いてありました。

今回は問題ありませんが、例えば、DBから読み込んだデータのIDに欠番が生じていた場合など、素直にその添え字をIDとして使うわけには行きません。


お手数ですが、もう少しお付き合い願えないでしょうか?

2007/04/25 21:48:18

その他の回答(2件)

id:studioes No.1

studioes回答回数522ベストアンサー獲得回数612007/04/25 18:38:20

ポイント30pt

<head>

<SCRIPT TYPE='text/javascript'>

<!--

function aa(){

var opt = new Option("-","▽都道府県を選択",true,true);

address_01.add(opt,0);

}

//-->

</SCRIPT>

</head>

<body onload="aa()">

こんなんでどうでしょ。

id:seadwell

おお!

javascriptでもできるのですね^^

前回に引き続き、ありがとうございました。

質問に書き忘れましたが、PHP5での処理も知りたいので、PHPでの書き方も引き続き回答を受付いたします。

多次元配列の配列名は$address_01とします。

よろしくお願いします。

2007/04/25 19:13:53
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/04/25 20:33:44ここでベストアンサー

ポイント30pt

先頭に追加なら

array_unshift( $address_01,array("-","▽都道府県を選択") );

array_unshift

http://jp.php.net/manual/ja/function.array-unshift.php

id:seadwell

いつも、回答ありがとうございます。

今回教えていただいたarray_unshiftという関数の手がかりができましたので、早速調べて試してみました。


多次元配列に2件のダミーデータを作成し、var_dump($address_01);で中を見てみますと以下のようになります。

array(2) { [1]=> string(14) "北海道" [2]=> string(12) "青森県" }


そして、教えていただいたarray_unshiftを掛け中を除いてみますと、

array(3) { [0]=> array(2) { [0]=> string(1) "-" [1]=> string(18) "▽カテゴリーを選択" } [1]=> string(14) "北海道" [2]=> string(12) "青森県" }

のようになっていました。

添え字[0]が新たに作成され、その中に配列が入っています。


そこでいろいろ調べてみましたら、array_unshiftは添え字配列の解説はなされているのですが、多次元配列や連想配列に関してのデーター挿入は見つけることができませんでした。

今回は、偶然ID_Noがvalue値になっていて、かつ、ID_Noが順番に並んでいるので、

array_unshift( $address_01,"▽都道府県を選択");でも

添え字として[0]が振られることで問題ありませんが、仮に多次元配列でKEYをvalueにしたい場合、value値が数字とは限りません。

また、array_unshiftを使うと添え字が[0]から振りなおされるとも書いてありました。

今回は問題ありませんが、例えば、DBから読み込んだデータのIDに欠番が生じていた場合など、素直にその添え字をIDとして使うわけには行きません。


お手数ですが、もう少しお付き合い願えないでしょうか?

2007/04/25 21:48:18
id:GEN111 No.3

GEN111回答回数472ベストアンサー獲得回数582007/04/25 22:34:54

ポイント20pt

 新しい要素のキーがコントロール下にあるなら素直に

$address_01[$newkey] = $newvalue ;

必要ならこのあとソート、じゃダメですか?

id:seadwell

それは、私も考えたのですが、何かいい関数があるのでは?と質問しました^^

回答ありがとうございます。

2007/04/26 02:08:26
  • id:studioes
    array(3) { [0]=> array(2) { [0]=> string(1) "-" [1]=> string(18) "▽カテゴリーを選択" } [1]=> string(14) "北海道" [2]=> string(12) "青森県" }
    そもそも元のデータが多次元配列じゃないような・・・
  • id:seadwell
    ん???これはどういう突っ込みでしょう?
    今回のテストデータは、回答にもありますようにダミーデータですし、質問が例えのドロップダウンリストですので、簡単なデータにしました。
    あくまでも、多次元配列の質問です。
    array(2) { [1]=> string(14) "ウェイクボード" [2]=> string(12) "スノーボード" } を連想配列や多次元配列として過程してもらうわけには行きませんか?
    ゆえに、value値が"-"の質問なのです。
  • id:kurukuru-neko


    sqlで繰り返し データを追加している
    のであればPHPは登録順序が保存されるので
    最初に代入して連想キーが重複しないので
    あれば最初に代入する。
    $address_01['-'] = '▽都道府県を選択';


    後でarray_mergeで配列を合成

    array_merge
    http://jp.php.net/manual/ja/function.array-merge.php

    または、例241.の+演算を使う。

  • id:GEN111
    ああ、+ のほうが良かったですかね。
  • id:seadwell
    あまりにもはしょり過ぎた質問で、皆さんに2度面倒をおかけしました。
    いかに簡単に質問するには?と考えすぎました。

    kurukuru-nekoさん、いつもありがとうございます。
    今回いろいろな関数をひとつの質問で教えてもらい、勉強になります。
    また、実線方法まで丁寧にありがとうございます。

    studioesさん
    JavaScriptでの方法をありがとうございます。
    GoogleマップのおかげでJavaScriptは最近やっとはじめたばかりで、まだわからないことだらけですが、いつもありがとうございます。

    今回、QuickFormクラスを使っているせいか?JavaScriptでは動いてくれませんでした(また、私が間違っているのでしょうが・・・)ので例241.の+演算で書きました。
    皆さんいつもいろいろありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません