2014-02-17 2 views
0

Хорошо, я абсолютно не знаком с PHP, поэтому держитесь там со мной, пытаясь изучить этот материал. В любом случае, так что в значительной степени у меня есть php-страница, на которой есть содержимое данных JSON и эхо-сообщение на странице просто отлично. Так что моя проблема в том, что моя JSON является нотированы многомерно, как так:Доступ к многомерным данным JSON через php.

{"product":[{"brandId":"632","brandName":"Sam Edelman","productId":"7515478","productName":"Gigi","styles":[{"price":"$64.95","styleId":"1788226","imageUrl":"http:\/\/www.zappos.com\/images\/z\/1\/7\/8\/8\/2\/2\/1788226-p-DETAILED.jpg","originalPrice":"$64.95","productUrl":"http:\/\/www.zappos.com\/product\/7515478\/color\/25","percentOff":"0%","color":"Almond"}, 

Так как я бы доступ сказать percentOff в первом элементе? Вот моя функция javascript, которую я использую для идеального захвата элементов и принятия решений, основанных на захвате элемента «percentOff».

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript"> 
function ajax_get_json(){ 
var results = document.getElementById("results"); 
var hr = new XMLHttpRequest(); 
hr.open("GET", "my_json_list.php", true); 
hr.setRequestHeader("Content-type", "application/json", true); 
hr.onereadystatechange == function() { 
    if(hr.readyState == 4 && hr.status == 200){ 
     var data = JSON.parse(hr.responseText); 
     results.innerHTML = ""; 
     for(var obj in data){ 
     results.innerHTML += data[obj].styles[obj].percentOff+""; //Or like this? 
      results.innerHTML += data[0].styles[obj].percentOff+""; //Would it look something like this? 
     } 
    } 
} 
hr.send(null); 
results.innerHTML = "requesting..."; 

} 

</script> 

</head> 
<body> 
<div id="results"></div> 
<script type="text/javascript">ajax_get_json();</script> 
</body> 
</html> 

Цените любую помощь раньше времени!

+0

возможно дубликат [Access/процесса (вложенные) объекты, массивы или JSON] (http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays-or-json) –

+1

Похоже, вы хотите получить доступ к данным в JavaScript, а не PHP. –

ответ

1

{"product": [{"brandId": "632", "brandName": "Sam Edelman", "productId": "7515478", "productName": "Gigi", "styles": [ "цена": "$ 64,95", "styleId": "1788226", "ImageUrl": "http://www.zappos.com/images/z/1/7/8/8/2/2/1788226-p -DETAILED.jpg», "originalPrice": "$ 64,95", "productUrl": "http://www.zappos.com/product/7515478/color/25", "percentOff": "0%", "цвет" : "Миндаль"}]}]}

Я скопировал и вставил его в здесь: http://jsoneditoronline.org/

<?php 

$json = '{"product":[{"brandId":"632","brandName":"Sam Edelman","productId":"7515478","productName":"Gigi","styles":[{"price":"$64.95","styleId":"1788226","imageUrl":"http:\/\/www.zappos.com\/images\/z\/1\/7\/8\/8\/2\/2\/1788226-p-DETAILED.jpg","originalPrice":"$64.95","productUrl":"http:\/\/www.zappos.com\/product\/7515478\/color\/25","percentOff":"0%","color":"Almond"}]}]}'; 

$data = json_decode($json,true); 

echo $data['product'][0]['styles'][0]['percentOff']; 

возвращает '0%';

BTW "Еогеасп" пригодится ....

например

foreach ($data['product'][0]['styles'][0] as $key => $value) { 
    echo "$key: $value<br>"; 
} 

возвращается:

price: $64.95 
styleId: 1788226 
imageUrl: http://www.zappos.com/images/z/1/7/8/8/2/2/1788226-p-DETAILED.jpg 
originalPrice: $64.95 
productUrl: http://www.zappos.com/product/7515478/color/25 
percentOff: 0% 
color: Almond 

foreach ($data as $key1 => $obj1) { 
    echo "Level 1: $key1: $obj1<br>"; 
    foreach ($obj1 as $key2 => $obj2) { 
     echo "Level 2: $key2: $obj2<br>"; 
     foreach ($obj2 as $key3 => $obj3) { 
      echo "Level 3: $key3: $obj3<br>"; 
      if (is_array($obj3)) { 
       foreach ($obj3 as $key4 => $obj4) { 
        echo "Level 4: $key4: $obj4<br>"; 
        if (is_array($obj4)) { 
         foreach ($obj4 as $key5 => $obj5) { 
          echo "Level 5: $key5: $obj5<br>"; 
          if ($key5 == 'percentOff') { 
           echo 'Percent Off is: '.$obj5.' or '.$obj4['percentOff'].'<br>'; 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

возвращает:

Level 1: product: Array 
Level 2: 0: Array 
Level 3: brandId: 632 
Level 3: brandName: Sam Edelman 
Level 3: productId: 7515478 
Level 3: productName: Gigi 
Level 3: styles: Array 
Level 4: 0: Array 
Level 5: price: $64.95 
Level 5: styleId: 1788226 
Level 5: imageUrl: http://www.zappos.com/images/z/1/7/8/8/2/2/1788226-p-DETAILED.jpg 
Level 5: originalPrice: $64.95 
Level 5: productUrl: http://www.zappos.com/product/7515478/color/25 
Level 5: percentOff: 0% 
Level 5: color: Almond 
+0

Прохладный. Но как мне получить доступ к этому в цикле for? – user3124081

+0

Ahh. Я зоопарк рядом! Таким образом, в пределах 5-го уровня я получаю доступ к элементам в этом массиве, что отлично. Я теряюсь в том, как получить доступ к каждому элементу percentOff на уровне 5. Нужно ли мне добавить для него уровень 6? – user3124081

+0

см. Изменения ('Percent Off is:'. $ Obj5. 'Or'. $ Obj4 ['percentOff']. '
';) –

Смежные вопросы