【问题标题】:looping secondary json array, selecting specific array循环辅助json数组,选择特定数组
【发布时间】:2014-04-08 06:37:48
【问题描述】:

我最近问了一个关于循环数组的问题,这个问题得到了解答:

答案已标记。

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

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,所以我可以说 go grab array {"product": [{"001": [{"title:..."002": [{... 而不是值为 001 的产品作为键 id。只是不确定很多事情,所以很难找到我的错误。

提前致谢。

【问题讨论】:

  • 你的循环有一些错误,你可以看我的答案和演示
  • 现在开始处理问题 bms 的第二部分 - 已回答。

标签: php arrays json loops


【解决方案1】:

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

<?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

【讨论】:

  • 完美,确实非常简单。
  • @rwxes 谢谢。您还可以查看我对您问题第二部分的回答和演示
  • 即使设置了 002,第二部分似乎也只显示 001 的内容。codepad.org/WyMnITjY
  • 对不起,这是我的大错。我忘了检查键值。查看我更新的答案和演示
【解决方案2】:

您需要先遍历第一个维度,然后才能遍历第二个维度:

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

【讨论】:

  • 再次 - 完美,确实非常简单。
【解决方案3】:

您可以使用 $key=>$value 来获取属性名称

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

【讨论】:

    【解决方案4】:

    根据 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
    

    谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2016-05-30
      • 2015-01-27
      相关资源
      最近更新 更多