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

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

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

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

Q&A

解決済

6回答

1645閲覧

PHP 配列内の分断された配列を結合する

lexuzon

総合スコア23

PHP

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

0グッド

0クリップ

投稿2016/06/28 09:50

お世話になります。
ある関数内が以下の様な配列になっており、 複数の配列が第一階層の Array で配列が分断されているのですが、
これをひと纏めにしたいのです。

どなたかご教授の方、お願いいたします。

Array
(
[0] => Array
(
[id_product_comment] => 2
[id_product] => 11
[id_customer] => 2
)

[1] => Array ( [id_product_comment] => 4 [id_product] => 11 [id_customer] => 2 ) [2] => Array ( [id_product_comment] => 8 [id_product] => 11 [id_customer] => 2 ) [3] => Array ( [id_product_comment] => 10 [id_product] => 11 [id_customer] => 2 )

)
Array
(
[0] => Array
(
[id_product_comment] => 5
[id_product] => 12
[id_customer] => 2
)

[1] => Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 )

)
Array
(
[0] => Array
(
[id_product_comment] => 6
[id_product] => 16
[id_customer] => 2
)

)

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

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

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

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

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

guest

回答6

0

ご回答いただいた皆様ありがとうございました!

投稿2016/06/29 01:28

lexuzon

総合スコア23

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

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

0

php

1<?php 2$before = array( 3 array( 4 array( 5 'id_product_comment' => 2, 6 'id_product' => 11, 7 'id_customer' => 2 8 ), 9 array( 10 'id_product_comment' => 4, 11 'id_product' => 11, 12 'id_customer' => 2 13 ), 14 array( 15 'id_product_comment' => 8, 16 'id_product' => 11, 17 'id_customer' => 2 18 ), 19 array( 20 'id_product_comment' => 10, 21 'id_product' => 11, 22 'id_customer' => 2 23 ) 24 ), 25 array( 26 array( 27 'id_product_comment' => 5, 28 'id_product' => 12, 29 'id_customer' => 2 30 ), 31 array( 32 'id_product_comment' => 9, 33 'id_product' => 12, 34 'id_customer' => 2 35 ) 36 ), 37 array( 38 array( 39 'id_product_comment' => 6, 40 'id_product' => 16, 41 'id_customer' => 2 42 ) 43 ) 44); 45 46echo 'Before : '; 47print_r($before); 48 49$after = array(); 50foreach ($before as $element) { 51 $after = array_merge($after, $element); 52} 53 54echo 'After : '; 55print_r($after);

実行結果

Before : Array ( [0] => Array ( [0] => Array ( [id_product_comment] => 2 [id_product] => 11 [id_customer] => 2 ) [1] => Array ( [id_product_comment] => 4 [id_product] => 11 [id_customer] => 2 ) [2] => Array ( [id_product_comment] => 8 [id_product] => 11 [id_customer] => 2 ) [3] => Array ( [id_product_comment] => 10 [id_product] => 11 [id_customer] => 2 ) ) [1] => Array ( [0] => Array ( [id_product_comment] => 5 [id_product] => 12 [id_customer] => 2 ) [1] => Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 ) ) [2] => Array ( [0] => Array ( [id_product_comment] => 6 [id_product] => 16 [id_customer] => 2 ) ) ) After : Array ( [0] => Array ( [id_product_comment] => 2 [id_product] => 11 [id_customer] => 2 ) [1] => Array ( [id_product_comment] => 4 [id_product] => 11 [id_customer] => 2 ) [2] => Array ( [id_product_comment] => 8 [id_product] => 11 [id_customer] => 2 ) [3] => Array ( [id_product_comment] => 10 [id_product] => 11 [id_customer] => 2 ) [4] => Array ( [id_product_comment] => 5 [id_product] => 12 [id_customer] => 2 ) [5] => Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 ) [6] => Array ( [id_product_comment] => 6 [id_product] => 16 [id_customer] => 2 ) )

投稿2016/06/28 13:34

KiyoshiMotoki

総合スコア4791

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

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

0

ベストアンサー

質問の記述だと 3 つの配列があるようにも見えるんですけど、それらも1つの配列になっているということですね。

array_mergecall_user_func_array で呼べばいけると思いますよ。

php

1$arr2 = call_user_func_array('array_merge', $arr);

PHP7 ならこれでも大丈夫です。

php

1$arr2 = array_merge(...$arr);

やってることは要するにこういうことです。

php

1$arr2 = array_merge($arr[0], $arr[1], $arr[2]);

投稿2016/06/28 10:51

編集2016/06/28 10:52
ngyuki

総合スコア4514

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

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

lexuzon

2016/06/28 12:27

ご回答有り難うございます。 はい、 3 つの配列が1つの配列に入っていて、なんらかの形で出力する場合、配列毎に区切りができてしまいます。 array_merge を call_user_func_array で呼んだ場合、まとまったのですが、 各配列の1つ目?のみを出力しています。 その上、[id_product_comment]に関しては処理前にはない不可解な数値が出ています。 出力例: Array ( [id_product_comment] => 12 [id_product] => 11 [id_customer] => 2 ) Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 ) Array ( [id_product_comment] => 6 [id_product] => 16 [id_customer] => 2 ) Array ( [id_product_comment] => 3 [id_product] => 24 [id_customer] => 2 ) Array ( [id_product_comment] => 7 [id_product] => 46 [id_customer] => 2 ) Array ( [id_product_comment] => 14 [id_product] => 48 [id_customer] => 2 ) 以下のように結合されればイメージ通りなのですが... Array ( [id_product_comment] => 2 [id_product] => 11 [id_customer] => 2 ) Array ( [id_product_comment] => 4 [id_product] => 11 [id_customer] => 2 ) Array ( [id_product_comment] => 8 [id_product] => 11 [id_customer] => 2 ) Array ( [id_product_comment] => 10 [id_product] => 11 [id_customer] => 2 ) Array ( [id_product_comment] => 5 [id_product] => 12 [id_customer] => 2 ) Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 ) Array ( [id_product_comment] => 6 [id_product] => 16 [id_customer] => 2 ) もしくは Array ( [0] => Array ( [id_product_comment] => 2 [id_product] => 11 [id_customer] => 2 ) [1] => Array ( [id_product_comment] => 4 [id_product] => 11 [id_customer] => 2 ) [2] => Array ( [id_product_comment] => 8 [id_product] => 11 [id_customer] => 2 ) [3] => Array ( [id_product_comment] => 10 [id_product] => 11 [id_customer] => 2 ) [5] => Array ( [id_product_comment] => 5 [id_product] => 12 [id_customer] => 2 ) [6] => Array ( [id_product_comment] => 9 [id_product] => 12 [id_customer] => 2 ) [7] => Array ( [id_product_comment] => 6 [id_product] => 16 [id_customer] => 2 ) )
ngyuki

2016/06/28 12:45

実際に試したコード(入力データも含む)を質問に追記すると良いと思います
guest

0

配列同士の結合ならarray_mergeが便利だと思います。
array_merge使用例3つ、実行結果はすべて同じです。

php

1// 第一階層の要素数が固定なら普通に渡す 2$result = array_merge($array[0], $array[1], $array[2]); 3 4// 可変ならcall_user_func_arrayを通して 5$result = call_user_func_array('array_merge', $array); 6 7// PHP5.6以降なら...で引数を展開できる 8$result = array_merge(...$array);

call_user_func_array
http://php.net/manual/ja/function.call-user-func-array.php

... による引数のアンパック
http://php.net/manual/ja/migration56.new-features.php#migration56.new-features.splat

投稿2016/06/28 10:45

nnssn

総合スコア1221

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

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

lexuzon

2016/06/28 12:32

ご回答有り難うございます。可変なのでcall_user_func_arrayでいけるかと試した見たのですが、各配列の1つづつを纏める形で出力され、配列内の配列を全て出力するには至りませんでした。
nnssn

2016/06/28 12:57 編集

提示の配列は array(0=>要素数4の配列, 1=>要素数2の配列, 2=>要素数1の配列) だと思っていたのですが、もしかして間違っていますか?
guest

0

とりあえず地道に

PHP

1$ar = array(); 2foreach ($data1 as $d) { 3 $ar[] = $d; 4} 5// 以下その他のデータも同様に

イメージの齟齬がないといいのですが…

投稿2016/06/28 10:40

takasima20

総合スコア7460

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

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

0

array_merge で結合はどうでしょうか?

投稿2016/06/28 10:08

YK1037

総合スコア236

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

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

lexuzon

2016/06/28 10:43

ご回答有り難うございます。 array_merge ですと、複数の配列が外にあって、それを結合する形なので、このケースで利用できるのでしょうか。既に1つの関数内で分断してつながっているので... $result = array_merge((array)$beginning, (array)$end);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問