実務で良くあるアルゴリズム
こういうのとか
$users = [ [ 'id' => 1, 'email' => '1@example.com', 'profile_enable' => true, ], [ 'id' => 2, 'email' => '2@example.com', 'profile_enable' => false, ], [ 'id' => 3, 'email' => '3@example.com', 'profile_enable' => true, ], ]; $user_profiles = [ [ 'id' => 1, 'user_id' => 1, 'name' => "優さん", ], [ 'id' => 2, 'user_id' => 2, 'name' => "佐藤", ], [ 'id' => 3, 'user_id' => 3, 'name' => "鈴木", ], ]; // 子を親のidでindexを指定して配列化 $profile_contents = []; foreach ($user_profiles as $user_profile) { $profile_contents[$user_profile['user_id']] = $user_profile; } // 親のプロフィール設定が有効であれば出力 foreach ($users as $user) { if ($user['profile_enable']) { print_r($profile_contents[$user['id']]); } } // Array // ( // [id] => 1 // [user_id] => 1 // [name] => 優さん // ) // Array // ( // [id] => 3 // [user_id] => 3 // [name] => 鈴木 // )
数が大きくなった重い処理を解消をする時に使える
public function getUsersSkillNames() { $users = Users->all(); $user_skill_names = []; foreach ( $users as $user ) { $user_profile = userProfile->where( 'user_id' , $user ->id); foreach ( $user_profile ->skill_ids as $skill_id ) { $user_skill_names [ $user ->id][] = Skill->where( 'id' , $skill_id )->name; } } return $user_skill_names ; } |
のようなn+1 な状況
解決する
連想配列で処理できるようにする
public function getUsersSkillNames() { $skills = Skill->all(); foreach ( $skill_arrays as $skill ) { $skill_names [ $skill_id ] = $skill ->name; } $user_skill_ids = User::with( 'profiles' )->pluck( 'skill_ids' , 'user_id' )->get()->toArray(); // ここはすべて配列で処理できる $user_skill_names = []; foreach ( $user_skill_ids as $user_id => $skill_ids ) { foreach ( $skill_ids as $skill_id ) { $user_skill_names [ $user ->id][] = $skill_names [ $skill_id ] } } return $user_skill_names ; } |
利用イメージ
$users_skill_names = $this ->getUserSkillNames(); $guest_users = User->where( 'type' , 'guest' )->get(); foreach ( $guest_users as $guest_user ) { $user_skill_names = isset( $user_skill_names [ $guest_user ->id]) ?? []; } |
解消できる
広告じゃまくさいしインタフェースが良くないブログだと思います。
ご意見有難う御座います!
シンプルで見やすいサイトだと思います。
広告についてもAdblock使えばいいだけなので問題ないです。
応援しています。
有難う御座います!

広告料金で維持費を賄っているので。
良い広告があれば見てあげてください