• ベストアンサー

配列の書き方

多次元配列を使って都道府県と地域名と運賃データを格納しようと思っています。 例えば 北海道 都道府県コード1 サイズによって 1470,1680,1890,2100,2310,2520 青森県  都道府県コード2 秋田県  都道府県コード3 岩手県  都道府県コード4 この3県はサイズによって 1050,1260,1470,1680,1890,2100 ・・・ という情報を格納したいです。 入力された都道府県データと個数で送料を判定したいのですがどのようにすればいいのか途方にくれています。 ご教授ください。

  • PHP
  • 回答数4
  • ありがとう数0

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

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

以下のような定義でどうでしょうか。 文字列をキーにするのはなんとなく気持ちが悪いので都道府県コードをキーにしてみました。更に入力された都道府県データは都道府県コードで、個数から送料のランク(という表現でいいでしょうか)が決定できるものと仮定しています。 $data = array( "01" => array("北海道", 1470, 1680, 1890, 2100, 2310, 2520), "02" => array("青森県", 1050, 1260, 1470, 1680, 1890, 2100), "03" => array("秋田県", 1050, 1260, 1470, 1680, 1890, 2100), "04" => array("岩手県", 1050, 1260, 1470, 1680, 1890, 2100), ); 例えば、北海道の2番目のサイズの送料は$data["01"][2]として取得します。 もっと良い書き方もあるかと思いますが、それよりもデータベースが使えるならデータベースを利用した方が良いと思います。

eccschool
質問者

補足

ご回答有難うございます。 こちらの表現はとてもすばらしいと思うのですが。青森と秋田と岩手が同じデータが入っているので勿体ない感じがしています。 イメージしているのは 北海道(都道府県コード2)で運賃(で運賃(1050, 1260, 1470, 1680, 1890, 2100), 東北地方(都道府県コード2,都道府県コード3,都道府県コード4)で運賃(1050, 1260, 1470, 1680, 1890, 2100), ・・・ 近畿地方(都道府県コード21,都道府県コード22,都道府県コード23)で運賃(780, 990, 1200, 1410, 1620, 1830), 見たいな感じです。静的なデータなのでDBはつかいたくないかな・・・という思いです。よろしくおねがいします

その他の回答 (3)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.2です。よろしくお願いされてしまったので。 効率的にデータを格納したいのならば尚更配列ではなくデータベースに格納すべきでしょう。 再利用性のないデータなのであれば、全体の処理のフローから都合のよい形の配列を定義すればいいだけだと考えます。 補足に書かれたイメージ通りの配列を実現するメリットはどのくらいあるのでしょうか。

  • koke29
  • ベストアンサー率58% (114/196)
回答No.3

単純に $hokkaido = array("1","1470","1680","1890","2100","2310","2520"); とかで47件データ作ってでも出来るんじゃないかとは思うんですが 処理の内容次第でより効率的になるなら例えばさっき書いたような データの作り方もありかなと思ったんすよ たぶんeccschool様がやりたいと思っていることは実現は可能な範疇 だとは思うのですが、何がしたいのかがよくわからないので 的を射た回答が出来ないというのが正直なところです

  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

提示されている条件では、具体的にどんなデータが欲しいのかわからない ので、イメージでもいいのでこういうのっていうのを出した方が答えやすい と思いますよ このデータを使っての処理のフローもよくわからないので、その辺も 書いた方がよいと思います フォームで何を選択させて、格納データで何がしたいとか。 とりあえず複数の県で重複する値があるなら エリアコードと運賃コードみたいなもののデータ(area.txt) [0]=>1[1]=>A //北海道 [0]=>2[1]=>B //青森県 [0]=>3[1]=>B //秋田県 [0]=>4[1]=>B //岩手県 運賃コードと運賃のデータ(price.txt) [0]=>A[1]=>1470[2]=>1680… [0]=>B[1]=>1050[2]=>1260… みたいな感じにしとくとかですかね?? 見当違いだったらスミマセン

eccschool
質問者

補足

ご回答有難うございます。 現在のところ多次元配列で検討しています。 都道府県コードと個数をキーにして引っ掛けて3次元目(?)の運賃を表示しようとしています。 こういうのは無理でしょうか?

関連するQ&A

  • VBA(EXCEL2000) 配列に文字列を格納する方法

    VBA(EXCEL2000) 配列に文字列を格納する方法 VBAを使用している初心者です。 文字列の配列宣言と同時にデータを格納する方法を教えて下さい。 '/----現在のコード-----------------------------/ Dim member(47) As String member(1) = "北海道" member(2) = "青森県" member(3) = "岩手県" '(途中略) member(46) = "鹿児島県" member(47) = "沖縄県" '/--------------------------------------------/ 下記のようなコードは実現可能でしょうか? Dim member() As String = {"北海道", "青森県", "岩手県",(途中略), "鹿児島県", "沖縄県"}

  • 配列のbindValue方法について

    <環境> サーバーOS:CentOS webサーバー:apache データベース:MySQL PHP5.2 現在、上記の環境でwebアプリを作成しています。 データベースにデータを登録する際にPDOを使用しているのですが、 二次元配列に格納されているデータを bindValue() できずに困っています。 データが多く、個数もその都度変化するので、二次元配列に格納しています。 簡易的ではありますが、以下のようなソースコードになります。 <ソースコード> $dataArray → データが格納されている二次元配列 $columns = array(':id', ':name'); → プレイスホルダー名を格納している配列 for($i = 0; $i < count($dataArray); $i++) { $stt = $dataBase -> prepare('insert into tb_test(id, name) values(:id, :name)'); for($j = 0; $j < count($dataArray[ i ]); $j++) { $stt -> bindValue($columns[ $j ] ,$dataArray[ $i ][ $j ]); } $stt -> execute(); } 二次元配列の1行分のデータをループで bindValue() してから execute() で実行しています。 これを二次元配列の行数回繰り返しています。 apacheのエラーログには特に何も表示されていませんが、 登録処理ができません。 このような forループ では実行できないのでしょうか?

    • 締切済み
    • PHP
  • エクセルで並べ替えて比較をしたいのですが。

     エクセルで並べ替えて比較をしたいのですが。 現在データの集計を行っているのですが、データ(仮に都道府県名としておきます)比較をするに際して シートAにあるデータとシートBにあるデータが必ずしも全て一致するわけではなく、 シートAは47都道府県全てのデータがあり シートBには所々データが抜けていて順番もAとは全然異なる配列で並んでいます。 この際にシートBのデータをシートAのデータの順番に並び替え一つのシートにし、データの分析を行いたいのですが、シートBの並べ替え方がわかりません。是非教えてください。よろしくお願いします。 変更前 シートAシートB 県名|顧客数 県 名|a|b|c 北海道|156 秋田県|1|5|4 青森県|283 | | | 岩手県|384 岩手県|2|6|4 宮城県|294 福島県|4|6|4 秋田県|148 | | | 山形県|54   青森県|3|5|1 福島県|213  宮城県|1|2|2 変更後 シートAシートB 県名|顧客数  県 名|a|b|c 北海道|156 青森県|283  青森県|3|5|1 岩手県|384  岩手県|2|6|4 宮城県|294  宮城県|1|2|2 秋田県|148  秋田県|1|5|4 山形県|54 福島県|213  福島県|4|6|4

  • [arduino]数値の大きなデータを二次配列へ

    シリアル通信で得たデータを二次元配列へ格納するために、 以前では、 if(Serial.available()>120){ for(int k=0;k<8;k++){ for(int l=0;l<15;l++){ //読み込んだ値を配列に代入 matrix[k][l]=Serial.read(); } } } このようなやり方で読み込んだ値を二次元配列に代入していたのですが、 128個以上のデータを扱いたい場合、Serial.availableでは保持できず、困っています。 方法として、 (1)一つずつデータを読み込み、128回ループを繰り返し配列に貯めていく。その後配列を2次元配列に代入する。 (2)一つデータを読みこんだら二次元配列の1行目1列目のドットに格納、もう一つデータを読みこんだら二次元配列の1行目2列目のドットに格納…というように、 読みこんだデータをそのまま二次元配列のそれぞれの場所へ格納していく。 というような二つの方法を思いついたのですが、 (1)の方法では、配列にデータを貯蓄していくコードをこのように↓書いたのですがうまくいかず、 for(int i=0;i<128;i++){ if(Serial.available()>0){ data[128] = Serial.read(); } } (2)の方法では、データを二次元配列のそれぞれの場所へ格納していく指定方法が分かりませんでした。 正しい書き方や、良いアイデアをお持ちの方がいましたら、是非御教授お願いします。

  • 読点の打ち方

    (1)私は北海道、青森、岩手、秋田、宮城に行ったことがある。 (2)私は北海道と、青森、岩手、秋田、宮城に行ったことがある。 (3)私は北海道と、青森と、岩手と、秋田と、宮城に行ったことがある。 (4)私は、北海道、青森、岩手、秋田、宮城に行ったことがある。 (5)私は、北海道と、青森、岩手、秋田、宮城に行ったことがある。 (6)私は、北海道と、青森と、岩手と、秋田と、宮城に行ったことがある。 (7)私は、北海道、青森、岩手、秋田、宮城に、行ったことがある。 (8)私は、北海道と、青森、岩手、秋田、宮城に、行ったことがある。 (9)私は、北海道と、青森と、岩手と、秋田と、宮城に、行ったことがある。 (10)私は北海道、青森、岩手、秋田、宮城に、行ったことがある。 (11)私は北海道と、青森、岩手、秋田、宮城に、行ったことがある。 (12)私は北海道と、青森と、岩手と、秋田と、宮城に、行ったことがある。 読点の付け方はどれが正しいですか? 都道府県の部分は「、」ではなく「・」の方がいいでしょうか? 「青森、岩手、秋田、宮城」ではなく「青森・岩手・秋田・宮城」の方がいいでしょうか?

  • C#での動的配列作成方法について

    はじめまして、 現在ASP.NET、C#で開発をしております。 そこで、質問です。 C#で二次元配列を作成し、データを格納します。 二次元配列は宣言時はサイズがわかってません。 ループで回った回数分、最初(第一要素数)の要素数が決定します。 二つ目の要素数の数は最初からきまっています(固定用素数)。 string[][] string[,] arraylist などがあると思いますが、上記の場合どういう風に配列を作成していったらいいのでしょうか? 動的にサイズを変更できる配列の作り方、データ格納方法、データ表示方法を教えてください。 よろしくお願いします。

  • SESSION変数の2次元配列

    ソースコードに $_SESSION[’place'][1][2] と記述されていました。 記述内容を考えていたのですが $_SESSION[’place']に、[1][2]=値 の2次元配列を格納するという 考え方で間違いないでしょうか? $_SESSION[’place'][1][2] は、3次元配列( =多次元配列)ではないと、いう考え方で あっていますでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列の順番により別の配列を並び替える

    $arr_pref = array('青森','岩手','宮城','秋田','山形','福島'); $arr_ken0 = array('pref' => '福島県', 'id' => 'fukushima'); $arr_ken1 = array('pref' => '秋田県', 'id' => 'noshiro'); $arr_ken2 = array('pref' => '秋田県', 'id' => 'akita'); $arr_ken3 = array('pref' => '岩手県', 'id' => 'morioka'); $arr_ken4 = array('pref' => '山形県', 'id' => 'yamagata'); $arr_kens = array($arr_ken0,$arr_ken1,$arr_ken2,$arr_ken3,$arr_ken4); 以上のような配列があった時に、$arr_kensの並び順を$arr_prefの順番にソートしたいと思っております。 県名の完全一致ではなく、部分一致もしくは前方一致でソートさせる方法はないものでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで配列の検索方法

    PHPで下のような2次元配列があったとします。(りんご=a、みかん=bのような意味です。CSVからデータを2次元配列に格納したものです。) $data[0][0]="りんご" , $data[0][1]="a" $data[1][0]="みかん" , $data[1][1]="b" $data[2][0]="ばなな" , $data[2][1]="c" $data[3][0]="ぶどう" , $data[3][1]="d" ここで下のような1次元配列$hogeがあったとき $hoge[0]="ばなな" , $hoge[1]="りんご" 新たに1次元配列$hogehogeを用意して、2次元配列の中から"りんご"や"ばなな"に対応する文字列を探し出して $hogehoge[0]="c" , $hogehoge[1]="a" と、格納したいのですが、やり方がわかりません。 イメージとしまして、 $hoge[0]→($data[0][0]~$data[3][0]の中から探す)→($data[2][0]であるとわかる)→($data[2][0]に対応するのは$data[2][1]だとわかる)→($hogehoge[0]=cと格納) もし分かる方がおられましたらお願いします。

    • ベストアンサー
    • PHP
  • excelで標準偏差の出し方

    excelで標準偏差を出したいです。 下のような市区町村別のデータが書いてある表があり、各都道府県別の人口の標準偏差を出したいです。   A   B    C(ここに人口のデータ) 1北海道  ○○市 2北海道  ○○市 3北海道  ○○市 4北海道  〃 5北海道  〃 6青森県  〃 7青森県  〃 8青森県  〃 9青森県  〃 10秋田県  〃 11秋田県  〃 12秋田県  〃 13秋田県  〃 ・ ・ ・ 「=STDEVP(C1:C5)」などと都道府県ごとにやるのでは手間がかかってしまうため、例えば北海道のデータを入力すればあとはそれを下にドラッグすればすべてのデータが正しく出るようにしたいです。 IF関数を使うのかと思ったのですが、いまいちやり方が分かりません。 excelに詳しい方、教えていただければ幸いです

専門家に質問してみよう