質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

412閲覧

phpで配列の結合が上手くできない

terapro

総合スコア39

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/01/26 06:38

状況によって値が変化する配列$cartArray, $newArray, $oldArrayがあります。

php

1var_dump($cartArray); 2var_dump($newArray); 3var_dump($oldArray);

result.php

1 2array(1) { 3 [1636679760]=> 4 array(1) { 5 ["cart_price"]=> 6 int(35999) 7 } 8} 9array(2) { 10 [1632531120]=> 11 array(1) { 12 ["new_price"]=> 13 int(-1) 14 } 15 [1636679760]=> 16 array(1) { 17 ["new_price"]=> 18 int(35999) 19 } 20} 21array(1) { 22 [1632531120]=> 23 array(1) { 24 ["old_price"]=> 25 int(-1) 26 } 27}

これらの配列を結合すると、期待する結果が得られます。

php

1$allArray = array_replace_recursive($cartArray, $newArray, $oldArray);

result.php

1array(2) { 2 [1636679760]=> 3 array(2) { 4 ["cart_price"]=> 5 int(35999) 6 ["new_price"]=> 7 int(35999) 8 } 9 [1632531120]=> 10 array(2) { 11 ["new_price"]=> 12 int(-1) 13 ["old_price"]=> 14 int(-1) 15 } 16}

ところが、$cartArray, $newArray, $oldArray いずれかの配列がnullであることがあり、その場合はエラーになってしまいます。
nullでない配列のみを結合するために色々試しましたが上手く行かず、識者の皆様にお知恵をお借りしたく質問させていただきます。

試したこと

php

1$setArray = [$cartArray, $newArray, $oldArray]; 2$setArrayCnt = count($setArray); 3for ($i = 0; $i < $setArrayCnt; $i++) { 4 if(!is_null($setArray[$i])){ 5 $setArray[] = $setArray[$i]; 6 } 7} 8 9$allArray = array_replace_recursive($setArray); // 配列は作成できるが、上のような期待する配列にならない

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2022/01/26 06:51

配列を例示するときはvar_dumpではなくvar_exportのほうが回答しやすいです
terapro

2022/01/26 09:27

失礼しました!次回以降var_exportを使います。
guest

回答1

0

ベストアンサー

PHP

1$allArray = array_replace_recursive($cartArray?:[], $newArray?:[], $oldArray?:[]);

投稿2022/01/26 06:57

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terapro

2022/01/26 09:31

期待通りの結果が得られました! ありがとうございました。 ?:[] を使った書き方を初めて見たのですが、自力で検索できませんでした。。(力不足) 勉強したいので参考になるソースなどご教授いただけないでしょうか?
terapro

2022/01/26 09:38

?: はエルビス演算子ですね! 詳しく調べてみます。 お手間お掛け致しました、ありがとうございました!
terapro

2022/01/26 10:22

なるほど。。。! nullは偽の判定になるので[]で初期化すると美しく結合できるんですね!! こここ、、こんな便利な書き方があったなんて。。うう。 大変お世話になりましたm(_ _)m また勉強して出直してまいります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問