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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

498閲覧

phpで配列の階層を減らそうとforeachをかけたがうまく行かない

lkjgffh

総合スコア37

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/02/20 04:17

前提・実現したいこと

深い階層に入っているデータを下記のような階層構造にしたい

array:2 [ 0 => array:4 [ "date" => "2017-12-09" "id" => 92 "name" => "えんどう" ] 1 => array:4 [ "date" => "2018-1-09" "id" => 92 "name" => "たなか" ] ]

発生している問題・エラーメッセージ

もともとこのような構造になっているデータをforeach出まわして取り出しました。
予想では下記二つの項目の階層がそれぞれひとつずつ外れると考えていました。

array:2 [ 0 => array:1 [ 0 => array:4 [ "date" => "2017-12-09"  "id" => 92  "name" => "えんどう" ] ] 1 => array:1 [ 0 => array:4 [ "date" => "2018-1-09" "id" => 92 "name" => "たなか" ] ] ]

しかし現在このような形式になってしまいました。

array:2 [ 0 => array:4 [ "date" => "2017-12-09"  "id" => 92  "name" => "えんどう" ] 1 => array:1 [ 0 => array:4 [ "date" => "2018-1-09" "id" => 92 "name" => "たなか" ] ] ]

該当のソースコード

foreach($data as $data_row){ $new_data[] = $data_row; }

試したこと

さらにもうひとつforeachを増やしたのですが、それでは先頭のものが下記のような状態になってしまいました。

array:2 [ "date" => "2017-12-09" "id" => 92 "name" => "えんどう" 1 => array:4 [ "date" => "2018-1-09" "id" => 92 "name" => "たなか" ] ]

一番初めのforeachで全体の階層がひとつ減ると思っていたのですが、どうして減らなかったのでしょうか?今回のように全体の階層をひとつ削除したい場合どのようにするのがよいでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

0番目って決まっているのであれば、こうですかね

php

1$new_data = []; 2foreach($data as $data_row){ 3 $new_data[] = $data_row[0]; 4} 5 6var_dump($new_data); 7/* 8 9 10array(2) { 11 [0]=> 12 array(3) { 13 ["date"]=> 14 string(10) "2017-12-09" 15 ["id"]=> 16 int(92) 17 ["name"]=> 18 string(12) "えんどう" 19 } 20 [1]=> 21 array(3) { 22 ["date"]=> 23 string(9) "2018-1-09" 24 ["id"]=> 25 int(92) 26 ["name"]=> 27 string(9) "たなか" 28 } 29} 30 31 32 33*/ 34

もっとスマートにできそうには思いますが。。。

投稿2018/02/20 04:41

m.ts10806

総合スコア80850

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

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

m.ts10806

2018/02/20 04:50

そういえば、質問本文に提示されている結果部分、配列内に情報は3つしかないのに「array:4」っておかしいですね。 なにか別物モノが含まれていたりします?
lkjgffh

2018/02/20 07:21

助かりました、ありがとうございます。番号がおかしいのはもともとのカラム名をこちらに載せたくなかったので少し手を加えてました。その際の修正ミスです
m.ts10806

2018/02/20 07:24

なるほど。 まあ適当にマスクかけるとかでも良いかとは思います。 また、kei344さんがご指摘されているようにvar_export ()で提示されたほうが回答者が再現確認をしやすくなります(動くように加工の手間が発生するので) 次回以降、気をつけてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問