1

これはLaravelでコレクションを反復処理するコードです:カスタムキーmapWithKeysで配列を返す方法は?

$usersData = $users->mapWithKeys(function ($item) { 
    return [$item->id => array("name" => $item->name, "email" => $item->email, "id" => $item->id)]; 
}); 

私は配列としてカスタムkeyと値を持つ配列$usersDataを取得しようとしました。

しかし、結果に、私はこれを取得:

array:1 [ 0 => array:3 [ "name" => "Doctor" "email" => "[email protected]" "id" => 2 ]] 

代わりにキー2私は、配列の要素のキー0を持っています。

答えて

1

私はあなたが何か間違っていると信じています。これを見てください:

$users = collect([ 
    (object)['id' => 5, 'value' => 30, 'something' => 'else'], 
    (object)['id' => 6, 'value' => 40, 'something' => 'else2'], 
    (object)['id' => 7, 'value' => 50, 'something' => 'else3'], 
    (object)['id' => 8, 'value' => 60, 'something' => 'else4'], 
    (object)['id' => 9, 'value' => 70, 'something' => 'else5'], 
    (object)['id' => 30, 'value' => 90, 'something' => 'else6'], 
]); 

$users = $users->mapWithKeys(function($user, $key) { 
    return [$user->id => $user]; 
}); 

dd($users); 

ここでの結果は次のとおりです。

Collection {#374 
    #items: array:6 [ 
    5 => {#364 
     +"id": 5 
     +"value": 30 
     +"something": "else" 
    } 
    6 => {#363 
     +"id": 6 
     +"value": 40 
     +"something": "else2" 
    } 
    7 => {#362 
     +"id": 7 
     +"value": 50 
     +"something": "else3" 
    } 
    8 => {#361 
     +"id": 8 
     +"value": 60 
     +"something": "else4" 
    } 
    9 => {#356 
     +"id": 9 
     +"value": 70 
     +"something": "else5" 
    } 
    30 => {#357 
     +"id": 30 
     +"value": 90 
     +"something": "else6" 
    } 
    ] 
} 

期待どおりに。たとえばdd($users->values())を使用して結果を表示しないのですか? values()はそれらのキーを削除するので、0から5までのインデックスが得られます。

これはうまくいかない場合があります。これはうまくいくはずです。

関連する問題