2017-10-12 1 views
0

J'essaie d'obtenir les données d'un fichier json à charger dans mon site wordpress. Je voudrais obtenir le prix du nom correspondant du produit du site que j'ai exploré. J'ai besoin du nom du produit pour correspondre à l'attribut du produit que j'ai ajouté dans la page du produit sur wordpress puis pour obtenir le prix si le nom correspond à l'attribut que j'ai ajouté. Je ne sais pas si j'ai du sens, mais voici mon code jusqu'à maintenant. Il a partiellement fonctionné, mais il a fait le même prix sur tous mes produits. Je suis plus récent au php alors quelqu'un peut-il aider? Essayer d'obtenir des données json si le nom de données correspond à l'attribut de produit avec php

<?php 

$str = file_get_contents('/run_results_apmex.json'); 

// decode JSON 
$json = json_decode($str, true); 

// get the data 
$coinPrice = $json['coin'][1]['price']; 

// echo it 
if($json['name'] == $product->get_attribute[ 'Apmex Vendor Name' ]){ 
echo $coinPrice; 
} 
else{ 
echo 'No results found'; 
} 

?> 
+0

Pouvez-vous fournir ce que sera la valeur de $ product-> get_attribute [ 'Apmex Nom du fournisseur']? –

+0

Ainsi, l'attribut s'appelle 'Nom du vendeur Apmex' et la valeur est le titre du produit: '1 oz Gold American Eagle BU (Année aléatoire)'. La raison pour laquelle je l'ai fait parce que j'ai rampé tous les produits sur leur site, et je dois correspondre à leur convention de nommage sur mon site. Mais j'ai également plusieurs fournisseurs que j'analyse donc j'ai décidé d'ajouter leurs conventions de nommage dans mon produit en tant qu'attributs de produit. Cela a-t-il du sens? – AaronS

+0

Mais 'BU American Gold Eagle 1 an (Random Year)' n'est pas disponible dans les données json/crawled. –

Répondre

0

Vous devez boucler le tableau JSON pour vérifier l'attribut du produit et obtenir le prix.

$str = file_get_contents('/run_results_apmex.json'); 

// decode JSON 
$json = json_decode($str, true); 

// default value 
$coinPrice = "No results found"; 
$product_attribute = '1 oz Gold American Eagle BU (Random Year)'; 
// loop the json array 
foreach($json['coin'] as $value){ 
    // check the condition 
    if($value['name'] == trim($product_attribute)){ 
     $coinPrice = $value['price']; // get the price 
     break; // exit the loop 
    } 
} 

echo $coinPrice; 

Ou vous pouvez créer une fonction récursive pour vérifier la in_array

$str = file_get_contents('http://gold.explorethatstore.com/wp-content/themes/divi-ETS-child-theme/run_results_apmex.json'); 

// decode JSON 
$json = json_decode($str, true); 

// here I am passing the string instead of $product->get_attribute[ 'Apmex Vendor Name' ]. replace it in your code 
$product_attribute = '1 oz Gold American Eagle BU (Random Year)'; 
$coinPrice = ($check = in_array_recursive(trim($product_attribute), $json['coin'])) ? $check['price']: 'No results found'; 
echo $coinPrice; 
// output is $1,426.19 

function in_array_recursive($needle, $haystack, $strict = false) { 
    foreach ($haystack as $item) { 
     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_recursive($needle, $item, $strict))) { 
      return $item; 
     } 
    } 
    return false; 
} 
+0

Merci beaucoup pour votre réponse !! Hmm qui semblait ne pas trouver le prix de la pièce, pourrait-il être parce qu'il ne lit pas l'attribut? – AaronS

+0

Peut être, pouvez-vous essayer de placer '1 oz Gold American Eagle BU (Random Year)' au lieu de $ product-> get_attribute ['Nom du vendeur Apmex'] –

+0

Je le ferais, mais j'ai besoin de cela pour travailler pour plusieurs produits quelques fichiers json différents. J'ajoute donc cette convention de nommage dans le tableau de bord du produit wordpress en tant qu'attributs. De cette façon, nous pouvons ajouter plus de produits et le faire fonctionner. Est-il possible que j'ai un mauvais appel pour l'attribut? – AaronS