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

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

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

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

Laravel 5

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

Q&A

解決済

2回答

13012閲覧

Laravel にて配列をまとめて、コレクションに変換したい。

hrsi_teratail

総合スコア93

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2018/04/03 10:40

以下のような配列のリクエスト情報があります。

"child_id" => array:2 [▼
0 => "38241"
1 => "38242"
]
"child_firstname_kana" => array:2 [▼
0 => "yamada"
1 => "yamada"
]
"child_lastname_kana" => array:2 [▼
0 => "カイト"
1 => "チヒロ"
]
"child_birthday" => array:2 [▼
0 => "2003-08-04"
1 => "2005-05-29"
]

これを一つの配列にまとめ、コレクションに変換後、データベースに
保存したいと思っております。

どのように実施すれば良いでしょうか。

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

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

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

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

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

yuuuui

2018/04/03 10:50

そのリクエスト情報は変動はしませんか?('child_id' や 'child_firstname_kana' などkeyの部分は変わらないですか?)
hrsi_teratail

2018/04/03 12:47

配列数は変化しますが、キーは固定になります。
guest

回答2

0

php

1$columns = ['child_id', 'child_firstname_kana', 'child_lastname_kana', 'child_birthday']; 2 3$collection = (new Model)->newCollection(array_map( 4 function (...$args) use ($columns) { 5 return new Model(array_combine($columns, $args)); 6 }, 7 ...array_values($request->only($columns)) 8));

$collection に集めたあとの処理はお好きにどうぞ

投稿2018/04/03 18:26

mpyw

総合スコア5223

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

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

0

ベストアンサー

配列数は変化するということで、

array:2 [▼ 0 => "38241" 1 => "38242" ] array:2 [▼ 0 => "yamada" 1 => "yamada" ] array:2 [▼ 0 => "カイト" 1 => "チヒロ" ] array:2 [▼ 0 => "2003-08-04" 1 => "2005-05-29" ]

は個別に取得できるものだと認識します。

PHP

1//$arrにの配列は取得できる配列に置き換えてください 2 $arr = [38241,38242]; 3 $arr1 = ['yamada', 'yamada']; 4 $arr2 = ['カイト', 'チヒロ']; 5 $arr3 = ['2003-08-04', '2005-05-29']; 6 7$collect = collect([ 8 'child_id' => $arr, 9 'child_firstname_kana' => $arr1, 10 'child_lastname_kana' => $arr2, 11 'child_birthday' => $arr3 12 ]); 13

上記でcollectに変換できます。

Collection {#221 ▼ #items: array:4 [▼ "child_id" => array:2 [▼ 0 => 38241 1 => 38242 ] "child_firstname_kana" => array:2 [▼ 0 => "yamada" 1 => "yamada" ] "child_lastname_kana" => array:2 [▼ 0 => "カイト" 1 => "チヒロ" ] "child_birthday" => array:2 [▼ 0 => "2003-08-04" 1 => "2005-05-29" ] ] }

もう少し簡単にできるかもしれないです
https://readouble.com/laravel/5.4/ja/collections.html

投稿2018/04/04 09:03

yuuuui

総合スコア59

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

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

yuuuui

2018/04/05 06:17 編集

combine()の方がもう少しわかりやすくできそうです。 (例) $collection = collect(['name', 'age']); $combined = $collection->combine(['George', 29]); $combined->all(); // ['name' => 'George', 'age' => 29]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問