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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

10003閲覧

PHP配列の階層を変えて整理する方法について

test_87097

総合スコア45

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/11/22 04:49

編集2016/11/22 06:26

phpの配列について上手く答えが出せないので質問をさせて頂きます。

array (size=2) 0 => array (size=2) 0 => string '100' (length=3) 1 => string '101' (length=3) 1 => array (size=2) 0 => string '102' (length=3) 1 => string '103' (length=3)

この配列を

array (size=4) 0 => string '100' (length=3) 1 => string '101' (length=3) 2 => string '102' (length=3) 3 => string '103' (length=3)

このように格納したいのですが、arrayの関数を仕様しても中々上手くいきません。何か良い方法はないでしょうか?ご教授お願いします

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

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

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

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

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

kei344

2016/11/22 05:30

コードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
test_87097

2016/11/22 06:27

ご指摘ありがとうございます。コードをコードブロックで囲みました。
guest

回答3

0

単純にこういうことですか?
それとも2個以上の配列を結合するケースもあるのでしょうか?

php

1$a=[ 2['100','101'], 3['102','103'], 4 ]; 5$b=array_merge($a[0],$a[1]); 6var_dump($b); 7

複数の要素

array_walK()を使う手もあります

PHP

1$a=[ 2['100','101'], 3['102','103'], 4['104','105'], 5 ]; 6$b=[]; 7array_walk($a,function($x) use (&$b){$b=array_merge($b,$x);}); 8var_dump($b); 9

投稿2016/11/22 04:56

編集2016/11/22 06:29
yambejp

総合スコア114583

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

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

test_87097

2016/11/22 06:22

ご回答ありがとうございます。 すいません、質問に書き忘れたのですが、1階層目のキーに増減があることを書き忘れてしまいました。ですのでarray_mergeが使えずに悩んでいたのです。質問の書き方が悪かったです、すいません。foreachを2回繰り返して格納していく方法で解決出来ました。
yambejp

2016/11/22 06:30

そういう意味ではarray_walkで処理するとよいかもしれませんね 追記しておいたので参考にしてください
test_87097

2016/11/25 08:50

すいません、返信が遅くなりました。 array_walkを使ってみましたが、希望する処理を行うことが出来ました! しかし、ちょっとコードが複雑になるのとforeachの方が処理も早いみたいなので、今回はforeachで取得することにしました。array_walkは使ったことのない関数なので勉強になりました。ありがとうございました。
guest

0

array_merge関数を使えば意図通りの事ができそうです。

PHP

1$a = ["101", "102"]; 2$b = ["103", "104"]; 3ver_dump(array_merge($a, $b)); 4# ["101", "102", "103", "104"]

ソートも同時にやりたいなら、sortメソッドが使えます。
ただし、破壊的メソッドです。
下記のように何かしらの使い捨ての変数に一度格納してから使ってください。

PHP

1$a = ["103", "102"]; 2$b = ["101", "104"]; 3ver_dump(array_merge($a, $b)); 4# ["103", "102", "101", "104"] 5 6$tmp = array_merge($a, $b); 7sort($tmp); 8ver_dump($tmp); 9# ["101", "102", "103", "104"]

投稿2016/11/22 05:00

編集2016/11/22 05:02
miyabi-sun

総合スコア21158

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

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

test_87097

2016/11/22 06:23

ご回答ありがとうございます。 すいません、質問に書き忘れたのですが、1階層目のキーに増減があることを書き忘れてしまいました。ですのでarray_mergeが使えずに悩んでいたのです。質問の書き方が悪かったです、すいません。foreachを2回繰り返して格納していく方法で解決出来ました。
test_87097

2016/11/25 08:52

すいません、返信が遅くなりました。 そうですね、この処理を行いたかったんです。 この処理だと階層が違ってもすべて同じ階層に出来るのですね。 今回は階層が変わることはないのですが、階層が変わる場合にはこの処理を使うと思います。 参考になりました。ありがとうございました。
guest

0

ベストアンサー

$datasが元データ

$ret = []; foreach ($datas as $arr) { foreach ($arr as $value) { $ret[] = $value; } }

投稿2016/11/22 04:56

kaji

総合スコア648

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

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

test_87097

2016/11/22 06:19

ご回答ありがとうございます。 foerachで回すと目的の変数を作成することが出来ました。 質問に言い忘れていたことがあったのですが、1階層目のキーが増える変動する可能性があるので、foreachを2回行う形で解決出来ました。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問