J'ai le tableau suivant en PHP:
[
{
"website": "example",
"url": "example.com"
},
{
"website": "example",
"url": "example.com"
}
]
Maintenant, j'aimerais convertir ceci en une collection afin que je trie par les clés website
ou url
. Cependant quand je fais ceci:
$myArray = collect(websites);
Je reçois ceci à la place:
{
"0": {
"website": "example",
"url": "example.com"
},
"1": {
"website": "example",
"url": "example.com"
}
}
Et le tri ne fonctionne pas, j'aimerais savoir ce que je fais de mal et comment je peux le réparer pour que je puisse facilement trier une collection d'objets.
Edit: Je m'attends à ce que le résultat soit le même que celui-ci:
[
{
"website": "example",
"url": "example.com"
},
{
"website": "example",
"url": "example.com"
}
]
Par "le tri ne fonctionne pas", je voulais dire que les éléments ne sont pas triés.
Si tu as
$collection = collect([
(object) [
'website' => 'Twitter',
'url' => 'Twitter.com'
],
(object) [
'website' => 'google',
'url' => 'google.com'
]
]);
Votre tableau est ensuite encapsulé dans une instance de la classe Collection. Cela signifie que cela ne se comporte pas comme un tableau typique (- il ressemblera à un tableau, mais ne le traitez pas comme tel -) jusqu'à ce que vous appeliez all()
ou toArray()
sur il. Pour supprimer tous les index ajoutés, vous devez utiliser values()
.
$sorted = $collection->sortBy('website');
$sorted->values()->all();
Le résultat attendu:
[
{#769
+"website": "google",
+"url": "google.com",
},
{#762
+"website": "Twitter",
+"url": "Twitter.com",
},
]
Voir la documentation https://laravel.com/docs/5.1/collections#available-methods
La méthode toArray
convertit la collection en un tableau simple PHP. Si les valeurs de la collection sont des modèles Eloquent, les modèles seront également convertis en tableaux.
La méthode all
renvoie le tableau sous-jacent représenté par la collection.