Lors d’un développement sous VueJS, l’application présentait des problèmes de filtre (.filter) et de recherche (.find) d’un tableau récupéré en Ajax par vue-resource. Après examen, le tableau n’était plus un array d’objets mais un objet d’objets.
La faute en reviens a une subtilité de json_encode à la frontière du bug: si un tableau a des index discontinus (suite à un filtrage par exemple) celui-ci se trouve encodé en objet d’objets. Or, la fonction filter des collections de Laravel provoquent précisément ce défaut.
La solution c’est l’usage de array_values pour ré-indexer le tableau avant d’en faire un json.
exemple:
$tableau=collect([ ["prenom"=>"Zoe","age"=>10], ["prenom"=>"Robert","age"=>50], ["prenom"=>"John","age"=>30] ]); echo json_encode($tableau); $tableau_filtre=$tableau->filter(function($element){return $element["age"]<40;}); echo json encode($tableau_filtre); // resolution: echo json_encode(array_values($tableau_filtre->toArray()));
=> ceci démontre le problème et sa résolution