• ベストアンサー

3つの連想配列を交互に代入して、新しい連想配列を作りたい

PHP Version 5.1.6を使っています。 それぞれの連想配列を先頭から順番に交互に代入したいのですが、 どのようなプログラムでできるのでしょうか? $arr1 = array(a1=>"aa1", a2=>"aa2", a3=>"aa3"); $arr2 = array(b1=>"bb1", b2=>"bb2", b3=>"bb3"); $arr3 = array(c1=>"cc1", c2=>"cc2", c3=>"cc3"); 代入後 $new_arr = array(  a1=>"aa1",  b1=>"bb1",  c1=>"cc1",  a2=>"aa2",  b2=>"bb2",  c2=>"cc2",  a3=>"aa3",  b3=>"bb3",  c3=>"cc3", );

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 まず連想配列に「先頭(或いは順番)」という概念はないのですが。 とりあえず…たとえばarray_keys関数を用いた復帰値の順番を仮に使うとして。 各配列が同じ要素数を持っていると仮定するなら、 $arr1_keys = array_keys($arr1); $arr2_keys = array_keys($arr1); $arr3_keys = array_keys($arr1); $count = count($arr1_keys); $new_arr = array(); while($count --) { $new_arr[$arr1_keys[$count]] = $arr1[$arr1_keys[$count]]; $new_arr[$arr2_keys[$count]] = $arr2[$arr2_keys[$count]]; $new_arr[$arr3_keys[$count]] = $arr3[$arr3_keys[$count]]; } 一応、このコードで「順番に交互に代入」は可能です。 でも、もう一度書いておきます。 連想配列に順番はありません。ですので、代入は交互に出来ても、たとえばforeachなどで「順番に出力されるか」は保証されません。

takagoo100
質問者

お礼

ご返答ありがとうございます。 できました。なるほど、キーだけ全部取得しちゃえば良かったんですね。 ところで、 >代入は交互に出来ても、たとえばforeachなどで「順番に出力されるか」は保証されません。 自分もそうだろうなぁとなんとなくですが思い、 順番を要する連想配列の使い方を諦めてたのですが、 どこかでPHPだけは代入した順番に表示されるとかなんとかいう記述を 見たことがあり、それでこれを利用したいと思い、使い始めました。 今のところ、代入した順番通りに表示されますし、問題はないように思えるのですが、 たとえばPHPでどのようなケースで起こりえるのでしょうか?

その他の回答 (1)

回答No.2

PHPではarrayとhashには違いがなく、どちらも配列データとして扱うようですね。 そのため、連想配列でもhash構造だけではなくて順序も保存するという少し不思議な特性があります。 そのため、ちょっと変更して $new_arr = array(); do{ if($x = each($arr1)) { $new_arr[$x['key']] = $x['value']; } if($y = each($arr2)) { $new_arr[$y['key']] = $y['value']; } if($z = each($arr3)) { $new_arr[$z['key']] = $z['value']; } }while($x || $y || $z); こんな感じにすると正しく動作するのではないかと思います。 ただしあまり一般的ではないと思いますので、素直に二次元配列などにして扱った方がいいと思います。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、こちらのやり方でもできました。 >ただしあまり一般的ではないと思いますので、 >素直に二次元配列などにして扱った方がいいと思います。 たしかに・・・ プログラムで不安が残っちゃ駄目ですからね。

関連するQ&A

  • responseTextから連想配列へ

    ajaxによってサーブレットから以下のresponseTextを取得したとします。 ~ A ~ a : aa b : bb c : cc ~ B ~ d : dd このようなレスポンスから var array; array["a"] = 'aa'; array["b"] = 'bb'; というように連想配列を取得したいのですが、どのようにすれば良いかわかりません。 どなたか力を貸していただけませんか?

  • JavaScriptの連想配列について

    myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C001"] = "C001";    myArray["A001"]["B002"]["C002"] = "C002";  myArray["A002"] = "A002"; JavaScriptの連想配列について質問させて頂きます。 例えば上記のような配列があったとして、値とキーはそのままで "C001" と "C002" の"B002"配列への格納順序だけ入れ替えたい場合、 どのように実装すればよろしいでしょうか? ちなみにキーや値はサンプルで実際にはsort出来るルールはありません。。。 ※入れ替え後のイメージ --------------------------------------------------------------------- myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C002"] = "C002"; ←格納順序が    myArray["A001"]["B002"]["C001"] = "C001";  入れ替わった  myArray["A002"] = "A002"; ---------------------------------------------------------------------

  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP
  • 連想配列の一部分を全て表示したいのですが・・。

    すみません。phpの事はあまりわからないのですが、以下のような連想配列がありまして、 (下記のような連想配列が大量にあります。) Array ( [0] => Array ( [a] => 1111 [0] => 1111 [b] => 2222 [1] => 2222 [c] => 3333 [2] => 3333 ) [1] => Array ( [a] => 5555 [0] => 5555 [b] => 6666 [1] => 6666 [c] => 7777 [2] => 7777 ) ) 上の配列から下記の配列のみ全て表示したいのですがどう記述したらよいでしょうか。 Array[0][a] Array[0][b] Array[0][c] Array[1][a] Array[1][b] Array[1][c]

    • ベストアンサー
    • PHP
  • 連想配列を配列に入れるには

    下記のような連想配列を配列に入れる簡単な方法はありますか。 array("a"=>"1","b"=>"2") 期待する結果(print_r) Array ( [0] => Array ( "a" => "1" ) [1] => Array ( "b" => "2" ) ) 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • MySQLから受け取ったデータを連想配列に代入

    2点間の距離を計算し、距離と場所名を連想配列にしたいのですが。 例えばデータベースのテーブルに 1 x1,y1,地点A 2 x2,y2,地点B 3 x3,y3,地点C 4 x4,y4,地点D のように2点の座標と場所名が入っています。 これをデータベースから引っ張ってきて距離が100以上を代入 *データベースに接続済み while($col = mysql_fetch_array($res)) { $kyori = (xとyの距離計算); if($kyori > 100){連想配列に代入} } としたいのですが、どうもarray_pushではうまくいきません。 結果としては $hairetu=array(地点A => 150,地点B => 200,地点D => 120,); のようになっていて欲しいのですが。 表示時にasortでソートしたいのでこのようにしたいのですが どなたかお知恵を貸して頂けませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 連想配列でキーを利用して一部分を引き抜きたい

    PHP5.2.4を使用しています。 配列で一部分を引き抜く関数は次のようなarray_spliceで、 $arr = array('a' => 1, 'b' => 2, 'c' => 3); $arr2 = array_splice($arr, 1/*←ここに'b'と書きたい*/, 1); print_r($arr2);//←Array ( [b] => 2 ) print_r($arr);//Array ( [a] => 1 [c] => 3 ) これは第2引数に添え字の番号(上の例だと1)を指定しなければいけないのですが、 そうではなくて、キー('a'や'b'など)を指定して引き抜きたいです。 そのような関数などはあるのでしょうか?

    • ベストアンサー
    • PHP
  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP
  • 配列のlengthの意味

    配列を作って以下のように作りました。 ==================================== var arr:Array = new Array(); arr[0] = "地球"; arr[1] = "太陽"; arr[2] = "月" arr["川"] = "rever"; arr["魚"] = "fish" arr["鳥"] = "bird"; trace(arr[0]);  //結果: 地球 trace(arr["魚"]);  //結果: fish trace(arr.length);  //結果: 3 →なぜ6ではない? ==================================== 連想配列3つと、普通の3つの2種類を arrという配列に入れたのですが、 lengthを調べると 3 と出ます。 連想配列というのは、 length には反映されないのでしょうか。 またその場合、連想配列の個数を調べるときは どのように書けばよいのでしょうか。 連想配列って、配列のどこに格納されているのだろう。。? と不思議に思ってしまいます。 ご存知の方いらっしゃいましたら、 何卒よろしくおねがいいたします。

    • ベストアンサー
    • Flash
  • 連想配列の代入処理

    初心者ですが、 三次元の連想配列に対して以下のように処理したいです。 $a =Array ( [0] => Array ( [Post] => Array ( [name] => FireFox [value] => 30 ) ) [1] => Array ( [Post] => Array ( [name] => Others [value] => 25 ) ) [2] => Array ( [Post] => Array ( [name] => IE [value] => 38 ) ) [3] => Array ( [Post] => Array ( [name] => Opera [value] => 7 ) )); それを $b = array( 'Firefox' => array( 'value' => 30 ), 'Others' => array( 'value' => 25 ), 'IE' => array( 'value' => 38 ), 'Opea' => array( 'value' => 7 ) ); に変換したいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう