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",
);
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などで「順番に出力されるか」は保証されません。
ご返答ありがとうございます。
できました。なるほど、キーだけ全部取得しちゃえば良かったんですね。
ところで、
>代入は交互に出来ても、たとえばforeachなどで「順番に出力されるか」は保証されません。
自分もそうだろうなぁとなんとなくですが思い、
順番を要する連想配列の使い方を諦めてたのですが、
どこかでPHPだけは代入した順番に表示されるとかなんとかいう記述を
見たことがあり、それでこれを利用したいと思い、使い始めました。
今のところ、代入した順番通りに表示されますし、問題はないように思えるのですが、
たとえばPHPでどのようなケースで起こりえるのでしょうか?
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);
こんな感じにすると正しく動作するのではないかと思います。
ただしあまり一般的ではないと思いますので、素直に二次元配列などにして扱った方がいいと思います。
ご返答ありがとうございます。
なるほど、こちらのやり方でもできました。
>ただしあまり一般的ではないと思いますので、
>素直に二次元配列などにして扱った方がいいと思います。
たしかに・・・
プログラムで不安が残っちゃ駄目ですからね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 歴史学 ロシア軍、前線兵士の離脱防ぐ「阻止部隊」って旧ソ連軍の「督戦隊」とどこが違うんでしょ? 3 2022/11/06 16:34
- 政治 立憲・泉代表、内閣不信任案提出を明言 「政府は生活実感に乏しい」 7 2022/06/08 12:07
- 飲み物・水・お茶 え!これ100%、ならば買おうかな。…しかし実際は… 10 2022/09/06 20:37
- 政治 辻元清美ちゃんの旧統一教会との関係の恥ずかしい言い訳……これで疑惑は更に深まりましたか? 1 2022/09/29 15:42
- 人類学・考古学 ドローンを飛ばして間近で古墳調査をするのって、宮内庁の許可は必要なのかな? 5 2023/03/04 09:07
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- 俳優・女優 真木よう子「日本人という事実が恥ずかしい」…… これから日本での露出や仕事は減るかな? 4 2022/11/18 19:35
- Excel(エクセル) スプレッドシートについて A1÷B1の値をC1に、A2÷B2をC2、A3÷B3をC3…といった感じで 1 2022/05/17 20:24
- 防犯カメラ・監視カメラ・小型カメラ 屋外用のIPカメラ(ライブカメラ)の位置情報について 1 2022/06/23 18:32
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
smartyのforeachの使い方
-
3つの連想配列を交互に代入し...
-
添え字が全て文字列のPHPの多次...
-
foreachのなかで次のキーを参照...
-
スカラーのベクトル微分
-
forとかで連番の変数を一気に格...
-
PHP 多次元配列変数のデータ受...
-
CSVデータのn番目だけの値を取...
-
$_SESSIONに二次元配列を使える...
-
While文を使って配列の中身を全...
-
多次元配列をソートする綺麗な...
-
CSVデータの行数カウントをした...
-
プルダウンメニューにDBの内容...
-
unset使用時の利点
-
配列の書き方
-
多次元配列の一次元目の最大値...
-
String だと「 ByRef引数の型が...
-
ログファイルが一定行数を超え...
-
multiple属性のPOSTを配列で受...
-
ヒアドキュメントの中のfor文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
foreachで上限回数指定方法また...
-
VB.NET で 二次元のハッシュは...
-
PHP、{}記号の意味
-
マッチング処理(1:N)
-
sqlのデーターを『あ行』『か行...
-
3つの連想配列を交互に代入し...
-
smartyのforeachの使い方
-
Smartyでインクリメント
-
Excel VBAでフィルター後の対象...
-
連想配列でキーを利用して一部...
-
ラジオボタンをランダムに表示...
-
ftokが動かない?
-
配列からプルダウン用のHTMLを生成
-
リストボックス複数選択抽出方法
-
関数の引数に配列を初期化なしで。
-
foreachの間にテーブルの<TR>を...
-
smartyでtplファイルでの2次元配列
-
PHPで変数名にハイフンを使うに...
-
PHPでJSONを扱うときに配列の参...
-
PHPで連想配列のプルダウンメニ...
おすすめ情報