2017-09-07 1 views
0

Je souhaite mapper certaines clés de la collection Laravel à d'autres, qui sont stockées dans un tableau.Collection Laravel. Mapper une clé à une autre

Je ne peux pas "inventer" un pipeline propre et court approprié pour une telle transformation.

Voici un exemple simplifié de ce que je veux:

$mappedKeys = [ 
    '1' => 'One', 
    '2' => 'Two', 
    '3' => 'Three', 
    '4' => 'Four', 
]; 

$data = collect([ 
    '1' => 'I', 
    '2' => 'II', 
    '3' => 'III', 
    '5' => 'V', 
]); 

$resultCollection = $data->... 

/* 
* I want to receive after some manipulations 
* 
* [ 
*  'One' => 'I', 
*  'Two' => 'II', 
*  'Three' => 'III', 
*  '5'  => 'V', 
* ] 
*/ 

Répondre

2

Vous pouvez toujours utiliser la méthode combine() sur la collection:

$mappedKeys = [ 
    '1' => 'One', 
    '2' => 'Two', 
    '3' => 'Three', 
    '4' => 'Four', 
]; 

$data = collect([ 
    '1' => 'I', 
    '2' => 'II', 
    '3' => 'III', 
    '5' => 'V', 
]); 

$resultCollection = $data->keyBy(function ($item, $key) use ($mappedKeys) { 
    return isset($mappedKeys[$key]) ? $mappedKeys[$key] : $key; 
}); 

Hope this aide!

+0

Merci, mais on dirait que j'ai trop simplifié. J'ai un tableau associatif, pas un simple. J'ai mis à jour un exemple. Pourriez-vous m'aider avec ça? –

+0

Merci) Je n'ai jamais utilisé keyBy auparavant et votre solution avec elle est soignée et plutôt jolie). –

1

Réponse Mise à jour

$resultCollection = $data->combine($mappedKeys); 
+0

Merci. J'ai mis à jour la réponse, donc votre solution est obsolète, mais c'était juste au début. Je suis prêt à ajouter +1, si vous le mettez à jour :) –

+0

@ D.R J'ai mis à jour la réponse .. :) –

+0

Désolé, mais votre solution ne fonctionnera pas. Je l'ai essayé. Je pensais que vous réécrire votre solution en PHP, donc cela pourrait être utile pour d'autres personnes, qui n'utilisent pas de collections mais qui ont un problème similaire. –