0
votes

Obtenir la valeur du tableau imbriqué de JSON

J'ai des données JSON qui vont d'une API. J'ai besoin que du nom des produits de là. Comment puis-je obtenir ça? J'essaie déjà avec la boucle foreach mais je ne peux pas. J'utilise Laravel Framework version 6.0

$getSbu = Helper::CreateGuzzleHttpClient('sbu');
foreach ($getSbu as  $value) {
     if($value->id == 2) {
          foreach ($value->categories as $category) {
                $products = $category->products;
             }
           }
        }


4 commentaires

Partagez votre code et expliquez ce que vous avez essayé et quels problèmes vous faites face à ce code


Je suis édité mon post.


Ce n'est pas JSON, pas un tableau. Avant "id" , il a toujours besoin d'un "{"


Désolé, j'ai raté ça. Correction faite.


4 Réponses :


0
votes
$getSbu = Helper::CreateGuzzleHttpClient('sbu');
foreach (json_decode($getSbu) as  $value) {
     if($value->id == 2) {
          foreach ($value->categories as $category) {
                $products = $category->products;
             }
           }
        }

2 commentaires

JSON_DECODE () s'attend à ce que le paramètre 1 soit une chaîne, une matrice donnée. Montrer cette erreur.


Basé sur votre question $ GetsBu est un JSON. Votre erreur dit que c'est déjà un tableau



1
votes

vous voulez obtenir uniquement le nom du produit ??

et si vos données array forts> alors vous devez changer Valeur $ ['ID'] forte> p>

$product_names = [];
foreach ($getSbu as  $value) {
     if($value->id == 2) {
          foreach ($value->categories as $category) {
                foreach ($category->products as $product) {
                     $product_names[] = $product->name;
                }
          }
      }
}
dd($product_names);


0 commentaires

2
votes

Après décodage, vous pouvez simplement utiliser cette assistant

use Illuminate\Support\Arr;

Arr::only($array, ['categories.products.name']);
or 
Arr::only($array, ['categories.*.name']);


2 commentaires

Cela ne fonctionnera pas, car il y a une matrimonie à l'intérieur.


$ getsbu = assistant :: crééguzzeauhttpclient ('sbu'); $ nom = Arr :: Seul ($ getsbu, ['catégories.products.name']); DD (NOM $); Obtenez un tableau vide



0
votes

Tirer parti des collections LARAVEL

// this is just ur data but as json string
$var = '[{"id":2,"name":"Bijj","categories":[{"id":10,"name":"Rice","sbu":2,"products":[{"id":25,"name":"Rajkumar","skus":[],"short_description":"বাংলাদেশের আবহাওয়া উপযোগী হাইব্রিড ধান"},{"id":50,"name":"Sera","skus":[],"short_description":"বাংলাদেশের আবহাওয়া উপযোগী হাইব্রিড ধান"}]},{"id":20,"name":"Vhutta","sbu":2,"products":[{"id":129,"name":"Pack-139","skus":[],"short_description":"মোচায় ৮৬ % দানা ও ১৪ % শাঁস"},{"id":125,"name":"Don-12","skus":[],"short_description":"সারা বৎসর চাষ উপযোগী"}]}]}]';

$objCollection = collect(json_decode($var, true));

$productNames = $objCollection->pluck('categories.*.products.*.name');

dd($productNames);


2 commentaires

Cela ne fonctionnera pas à cette question. Parce que les produits à l'intérieur sont toujours une matrice. Vous devez toujours la boucler.


@Tsaikoga maintenant, cela fonctionne à coup sûr, vous devez simplement ajouter un * pour cela.