2011-12-28 7 views
0

J'ai 2 données json de nosql. premier match si le mot recherché correspond à $array1, obtenir le item number puis mettre item number dans $array2, obtenir le prix de la recherche personnalisée requise. Mais mon code dans la cause Invalid argument supplied for foreach() foreach($json2[$num] as $data2)php json décode résultat dans un autre décodage json

$str = 'paper'; 
$array1 = '[{"a":"1","b":"book"},{"a":"2","b":"paper"}]'; 
$array2 = '[{"1":["17.00","22.00"]},{"2",["4.50","6.00"]}]'; 
$json1 = json_decode($array1); 
$json2 = json_decode($array2,true); 
foreach($json1 as $data1){ 
    if(preg_match('#'.$data1->b.'#',$str,$match)){ 
     $num = $data1->a; // $num = 2 
    } 
} 
foreach($json2[$num] as $data2){ 
    foreach($data2 as $newdata){ 
     echo $newdata.'<br />'; // 4.50, 6.00 
    } 
} 
+0

Cette erreur signifie que 'json2 $ [$ num]' est nulle ou non définie. Essayez le débogage avec 'var_dump'. –

+0

@Tom van der Woerdt, revenez: 'array (2) {[0] => array (1) {[1] => array (2) {[0] => string (5)" 17.00 "[1 ] => string (5) "22.00"}} [1] => array (1) {[2] => array (2) {[0] => chaîne (5) "4.50" [1] => chaîne (5) "6.00"}}} ' – cj333

+0

qui ressemble à un vidage de votre variable' $ json2', mais qu'en est-il de '$ num' et' $ json2 [$ num] '? –

Répondre

0

Tout d'abord, votre JSON pour $array2 n'est pas valide. Il devrait être:

[{"1":["17.00","22.00"]},{"2":["4.50","6.00"]}] 
-----------------------------^ 
This should be a ":", not a "," 

Votre JSON est en réalité un tableau d'objets (tableaux). var_dump($json2); le montre.

array(2) { 
    [0]=> 
    array(1) { 
    [1]=> 
    array(2) { 
     [0]=> 
     string(5) "17.00" 
     [1]=> 
     string(5) "22.00" 
    } 
    } 
    [1]=> 
    array(1) { 
    [2]=> 
    array(2) { 
     [0]=> 
     string(4) "4.50" 
     [1]=> 
     string(4) "6.00" 
    } 
    } 
} 

Vous allez devoir faire une boucle sur elle comme ceci:

foreach($json2 as $data2){ 
    if(array_key_exists($num, $data2)){ 
     $data2 = $data2[$num]; 
     foreach($data2 as $newdata){ 
      echo $newdata.'<br />'; // 4.50, 6.00 
     } 
    } 
} 
0

Si $num = 2 dans vos commentaires est correct, vous aurez accès le troisième élément de $json2 mais vous ne pouvez pas car il n'y a que deux.

Mise à jour
Oops, comment ai-je raté cela? Votre $array2 a déjà les indices, vous ne les chargez pas correctement. Vous pouvez simplement parcourir $array2 et chercher la clé. Cependant, une meilleure solution serait de charger les données correctement, en remplissant $array2 comme un dictionnaire plutôt qu'une liste.

+0

alors comment faire dans mon deuxième foreach? J'ai besoin de preg_match pour obtenir le formulaire 'nombre d'éléments'' foreach 1', puis utiliser le nombre obtenir le 'data' de' foreach 2'. – cj333

+0

Je suppose que vous pourriez utiliser '$ json2 [$ num-1]' mais je ne sais pas si c'est une solution temporaire ou si c'est la solution réelle pour votre problème. –

+0

'$ json2 [$ num-1]' n'est pas une bonne solution, ces données stockées dans mes 'nosql', je mettrai toujours mes données à jour, peut-être que la commande stockée sera modifiée dans le futur, peut-être la prochaine fois array2 = '[{"2", ["4.50", "6.00"]}, {"1": ["17.00", "22.00"]}]'; 'donc le résultat sera faux. tout moyen correct d'obtenir le résultat dont j'ai besoin? Merci. – cj333