循环辅助json数组,选择特定数组

时间:2014-04-08 06:37:49

标签: php arrays json loops

我最近问了一个关于循环数组的问题,该数组已经回答并使用了这个:

回答标记。

我自己修改过的答案也在下面。

JSON

{"product": [{
    "title":"Product One",
    "price":"Price One",
    "desc":"Description One"
  }]
}

PHP

  foreach($product['product'] as $value) {
    echo "Title : " .$value['title'];
  }

我一直在试图弄清楚如何循环第二级(?)数组,例如这个image数组。

JSON

{"product": [{
    "title":"Product One",
    "price":"Price One",
    "desc":"Description One",
    "image": [{
        "img":"image 1 1"
    },{
        "img":"image 1 2"
    },{
        "img":"image 1 3"
    }]
}, {
    "title":"Product Two",
    "price":"Price Two",
    "desc":"Description Two",
    "image": [{
        "img":"image 2 1"
    },{
        "img":"image 2 2"
    },{
        "img":"image 2 3"
    }]
}]
}

到目前为止,我已经尝试过这个:

<?php
    foreach($product['product']['image'] as $value) {
      echo "Image: " .$value['img'] . "<br>";
  }
?>

<?php
    foreach($product['product'] as $value) {
      echo "Image: " .$value['image']['img'] . "<br>";
  }
?>

以及类似想法的一些变化。

我想要的输出是:

Image: image 1 1
Image: image 1 2
Image: image 1 3
Image: image 2 1
Image: image 2 2
Image: image 2 3

另外,我如何通过值例如..

来选择数组

JSON

{"product": [{
    "id":"001"
    "title":"Product One",
    "price":"Price One",
    "desc":"Description One"
  },{
    "id":"002"
    "title":"Product One",
    "price":"Price One",
    "desc":"Description One"
  }]
}

PHP

 if ( isset( $product['product']['id'] && $product['product']['id'] == "001") ) {
  foreach(*specific array as $value) {
    echo "Title : " .$value['title'] . "<br>";
    echo "Price : " .$value['price'] . "<br>";
  }

等。

我在想更好的方法是将数组设置为id,这样我就可以说抓住数组{"product": [{"001": [{"title:..."002": [{...而不是价值001的产品用于密钥{{1} }。只是不确定很多事情所以很难找到我的错误。

提前致谢。

4 个答案:

答案 0 :(得分:2)

对于第一部分,您可以使用以下内容;

<?php
    foreach($product['product'] as $value) {
        foreach($value["image"] as $image) {
            echo "Image: " .$image['img'] . "<br>"; 
        }

  }
?>

以下是一个有效的演示: Demo

对于第二部分,您可以使用以下内容;

function getArrValue($key, &$product) {
        foreach ($product["product"] as $product) {
            if (!empty($product["id"]) && $product["id"] == $key) {
                return $product;
            }
        }
    }

var_dump(getArrValue("001", $product));

您可以在此处查看演示: Demo

答案 1 :(得分:1)

在迭代第二个维度之前,您需要迭代第一个维度:

foreach ($data['product'] as $product) {
    //echo "Title : " . $product['title'] . "\n";
    foreach ($product['image'] as $image) {
        echo "Image: {$image['img']}\n";
    }
}

答案 2 :(得分:1)

您可以使用$ key =&gt; $ value获取属性名称

foreach($product['product'] as $key=>$value){
    if  ($key =="image"){
       foreach($value as $img){
          echo "Image: ".$img;
       }
    }
}

答案 3 :(得分:0)

根据 paulitto 答案找出符合我需求的小型解决方案。

PHP

foreach($product['product'] as $key=>$value){
    if ($value['id'] =="001") {
      echo "Title: " .$value['title']."<br>";
        foreach($value['image'] as $img){
          echo "Image: " .$img['img']."<br>";
        }
    }
}

输出

Title: Product One
Image: image 1 1
Image: image 1 2
Image: image 1 3

谢谢大家。