J'ai une requête Laravel retournant une liste. J'ai besoin de filtrer cette liste et de choisir un élément aléatoire après le filtrage.Accès à une liste éloquente sous la forme d'un tableau d'objets dans Laravel 4
$places = getPlaces();
if (count($places) > 0) {
$places = array_filter($places, "filter"); // 2016/08/25: see http://php.net/manual/en/function.array-filter.php
$randomPlace = $places[rand(0, count($places) - 1)];
}
Cela donne une erreur:
array_filter() expects parameter 1 to be array, object give
Si je jetai $places
à revête l'erreur va, mais je reçois rien:
$places = getPlaces();
if (count($places) > 0) {
$places = (array)$places;
$places = array_filter($places, "filter");
$randomPlace = $places[rand(0, count($places) - 1)];
}
Quand je vérifie count($places)
je vois qu'il n'y a qu'un seul élément . Le résultat a plusieurs.
Pour contourner le problème du filtre que j'utilise Eloquent de toArray()
:
if (count($places) > 0) {
$places = $places->toArray();
$places = array_filter($places, "filter");
if (count($places) > 0) {
$randomPlace = $places[rand(0, count($places) - 1)];
}
}
Cela fonctionne pour filter
mais je terre en deux défis:
Je ne peux pas accéder à $ randomPlace comme un objet par exemple $ randomPlace-> nom. Je dois utiliser l'accès au tableau, $ randomPlace ['nom']. Comme il existe d'autres méthodes qui attendent un objet, cela signifie qu'il faut changer/convertir toutes ces méthodes.
$ lieux [rand (0, count ($ places) - 1)] donne une erreur, par exemple:
Undefined offset: 4
Autre que d'avoir à changer toutes les méthodes à utiliser arrays
place (objects
(perdant de ce fait la fonctionnalité), pour l'instant la seule autre méthode de ma tête est de créer une fonction qui itère sur $ places et place les objets dans un tableau.
Existe-t-il une meilleure façon de gérer cela?
Merci.
Vous pouvez utiliser la méthode de collecte '$ places-> filter ('filter')' ou essayer d'obtenir les valeurs uniquement en utilisant 'array_values ($ places)'. Ma conjecture est que 'array_filter' préserve les clés et supprime l'élément où key = 4. –