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

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

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

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

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

配列

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

Q&A

解決済

4回答

1158閲覧

共通の値を同じ配列に入れ異なる値をkeyの中で分けたい

退会済みユーザー

退会済みユーザー

総合スコア0

多次元配列

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

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

配列

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

0グッド

0クリップ

投稿2020/03/17 04:58

$list = $query->groupBy('name')->toList();

下記配列になりました。

[0] => [ name => hoge, mail => hoge1@gmail.com] [ name => hoge, mail => hoge2@gmail.com] [ name => hoge, mail => hoge3@gmail.com] [1] => [ name => huga, mail => huga1@gmail.com] [ name => huga, mail => huga2@gmail.com] [ name => huga, mail => huga3@gmail.com]

上記のような配列を下記のような配列にしたいです。

[0] => [ name => hoge mail => [ hoge1@gmail.com hoge2@gmail.com hoge3@gmail.com ] ] [1] => [ name => huga mail => [ huga1@gmail.com huga2@gmail.com huga3@gmail.com ] ]

indexByやarray_uniqueなども試したのですが期待の値が取ってこれなかったのでこちらで質問させていただきました。
よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/03/17 05:12

var_export()を使って配列データ例を出力してくれると、第三者もすぐ試しやすいのですが。
yambejp

2020/03/17 05:15

元リストはこうで間違いないですか? $list=[ [ [ "name" => "hoge", "mail" => "hoge1@gmail.com"], [ "name" => "hoge", "mail" => "hoge2@gmail.com"], [ "name" => "hoge", "mail" => "hoge3@gmail.com"], ], [ [ "name" => "huga", "mail" => "huga1@gmail.com"], [ "name" => "huga", "mail" => "huga2@gmail.com"], [ "name" => "huga", "mail" => "huga3@gmail.com"], ], ];
退会済みユーザー

退会済みユーザー

2020/03/17 05:22 編集

すいません、 array(2) { [0]=> array(4) { [0]=> object { "name" => "hoge", "mail" => "hoge1@gmail.com"}, [1]=> object {,,,,,},,,} [1]=> array(4) { [0]=> object { "name" => "huga", "mail" => "huga1@gmail.com"}, [1]=> object {,,,,,},,,} } となっています。
guest

回答4

0

array_column という Laravelの pluck みたいな関数があります。

php

1$data = [/*元データ*/]; 2 3$result = array_map(function ($item) { 4 return [ 5 'name' => $item[0]['name'], 6 'mail' => array_column($item, 'mail'), 7 ]; 8}, $data); 9 10var_dump($result); 11/* 12array(2) { 13 [0]=> 14 array(2) { 15 ["name"]=> 16 string(4) "hoge" 17 ["mail"]=> 18 array(3) { 19 [0]=> 20 string(17) "hoge1@example.com" 21 [1]=> 22 string(17) "hoge2@example.com" 23 [2]=> 24 string(17) "hoge3@example.com" 25 } 26 } 27 [1]=> 28 array(2) { 29 ["name"]=> 30 string(4) "huga" 31 ["mail"]=> 32 array(3) { 33 [0]=> 34 string(17) "huga1@example.com" 35 [1]=> 36 string(17) "huga2@example.com" 37 [2]=> 38 string(17) "huga3@example.com" 39 } 40 } 41} 42*/

投稿2020/03/17 05:37

kodai

総合スコア759

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

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

退会済みユーザー

退会済みユーザー

2020/03/17 05:42

ありがとうございます!こちらシンプルで使いやすいです!
guest

0

$queryから求める方法です。

php

1use Cake\Utility\Hash; 2 3$result = $query->groupBy('name') 4 ->map(static function ($records) { 5 return [ 6 'name' => Hash::get($records, '0.name'), 7 'mail' => Hash::extract($records, '{n}.mail'), 8 ]; 9 }) 10 ->toList();

投稿2020/03/17 06:53

編集2020/03/17 06:55
nojimage

総合スコア959

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

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

退会済みユーザー

退会済みユーザー

2020/03/17 06:59

ありがとうございます!! 取得した値を $result->name として取りたい場合はどうしたらいいですか?
nojimage

2020/03/17 07:04

mapの中の return を Entity として返すとよいでしょう。 return new Entity([ ... ]);
退会済みユーザー

退会済みユーザー

2020/03/17 07:07

いけました!!ありがとうございます!大変助かりました!!
nojimage

2020/03/17 07:13

あ、エンティティとして扱いたいなら、SQLでGROUP_CONCATを使用して取得する手法もありますね。
guest

0

php

1foreach ($list[0] as $k => $v ){ 2 $data['hoge'][$k] = $v; 3}

こんな感じでいけるんじゃないですかね

投稿2020/03/17 05:24

Nash-BETA

総合スコア233

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

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

Nash-BETA

2020/03/17 05:28 編集

for文も追加すればもっと多く処理できるかな for ($i = 1 ; $i < 10 ; $i++ ){ foreach ($list[$i] as $k => $v ){ $data['hoge'][$k] = $v; } }
guest

0

ベストアンサー

こんな感じでどうでしょうか?

投稿2020/03/17 05:22

yambejp

総合スコア116724

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

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

yambejp

2020/03/17 05:22

<?PHP $a=[ [ [ "name" => "hoge", "mail" => "hoge1@gmail.com"], [ "name" => "hoge", "mail" => "hoge2@gmail.com"], [ "name" => "hoge", "mail" => "hoge3@gmail.com"], ], [ [ "name" => "huga", "mail" => "huga1@gmail.com"], [ "name" => "huga", "mail" => "huga2@gmail.com"], [ "name" => "huga", "mail" => "huga3@gmail.com"], ], ]; $b=array_map(function($x){ return ["name"=>$x[0]["name"],"mail"=>array_map(function($y){ return $y["mail"]; },$x)]; },$a); print_r($b);
退会済みユーザー

退会済みユーザー

2020/03/17 05:27

ありがとうございます、期待値になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問