【问题标题】:Extract key elements from Json in PHP在 PHP 中从 Json 中提取关键元素
【发布时间】:2019-09-13 06:04:40
【问题描述】:

我需要在 PHP 中使用 Json 文件,这样我就可以在其主要元素的特定键中进行迭代。

我有这个示例 Json 数据:

[{"A": [
    {
        "name": "object 1",
        "code": "x001",
        "date": "2018-01-01T23:00:00-0600"
    },
    {
        "name": "object 2",
        "code": "x002",
        "date": "2018-01-01T23:00:00-0600"
    },
    {
        "name": "object 3",
        "code": "x003",
        "date": "2018-01-01T23:00:00-0600"
    }
]},{"B": [
    {
        "name": "object 1",
        "code": "y001"
        "date": "2018-01-01T23:00:00-0600"
    },
    {
        "name": "object 2",
        "code": "y002",
        "date": "2018-01-01T23:00:00-0600"
    }
]}]

据我所知,我可以像这样处理 Json 文件(主键 A 和 B 中没有嵌套元素):

<?php
$url = './data.json';
$data = file_get_contents($url);
echo "<!--- File contents -->\n";
var_dump($data);
$contents = json_decode($data, true);
echo "<!--- Associative Array -->\n";
var_dump($contents);


echo "<!--- BEGIN -->";
foreach ($contents as $element) {
        echo "Name: " . $element['name'] . "\n";
        echo "Code: " . $element['code'] . "\n";
        echo "Date: " . $element['date'] . "\n";
        echo "- - - - - -\n";
}
echo "<!--- END -->";
?>

我要做的是在给定键内调用一个循环,例如,一个循环对应于 B 的所有元素:

    {
        "name": "object 1",
        "code": "y001"
        "date": "2018-01-01T23:00:00-0600"
    },
    {
        "name": "object 2",
        "code": "y002",
        "date": "2018-01-01T23:00:00-0600"
    }

可能会将这些元素提取到第二个关联数组或其他建议的方法...

而预期的结果需要是:

Name: object 1
Code: y001
Date: 2018-01-01T23:00:00-0600
- - - - - -
Name: object 2
Code: y002
Date: 2018-01-01T23:00:00-0600
- - - - - -

忽略 A 元素

【问题讨论】:

    标签: php arrays json loops


    【解决方案1】:

    请试试这个一站式文件。您可以通过复制此代码自行尝试。

    <?php
    
    $data = '[{"A":[{"name": "object 1","code": "x001","date": "2018-01-01T23:00:00-0600"},{"name": "object 2","code": "x002","date": "2018-01-01T23:00:00-0600"},{"name": "object 3","code": "x003","date": "2018-01-01T23:00:00-0600"}]},{"B": [{"name": "object 1","code": "y001","date": "2018-01-01T23:00:00-0600"},{"name": "object 2","code": "y002","date": "2018-01-01T23:00:00-0600"}]}]';
    
    // $url = './data.json';
    // $data = file_get_contents($url);
    echo "<!--- File contents -->\n";
    $contents = json_decode($data, true);
    echo "<!--- Associative Array -->\n";
    echo "<pre>";
    // var_dump($contents);
    echo "</pre>";
    
    
    echo "<!--- BEGIN -->";
    echo "<pre>";
    foreach ($contents as $element) {
    
        if(!isset($element['B'])) continue;
        foreach($element as $items){
            foreach($items as $item){
            echo "Name: " . $item['name'] . "\n";
            echo "Code: " . $item['code'] . "\n";
            echo "Date: " . $item['date'] . "\n";
            echo "- - - - - -\n";
            }
        }
        echo "- - - - - -\n";
    }
    echo "</pre>";
    echo "<!--- END -->";
    

    输出

    Name: object 1
    Code: y001
    Date: 2018-01-01T23:00:00-0600
    - - - - - -
    Name: object 2
    Code: y002
    Date: 2018-01-01T23:00:00-0600
    - - - - - -
    - - - - - -
    

    【讨论】:

      【解决方案2】:

      你可以用foreach()循环这样做

      $array = json_decode($json,1);
      //$array[1] for accessing contents of B
      echo "<!--- BEGIN -->\n";
      foreach($array[1] as $key=>$contents){
         foreach ($contents as $element) {
              echo "Name: " . $element['name'] . "\n";
              echo "Code: " . $element['code'] . "\n";
              echo "Date: " . $element['date'] . "\n";
              echo "- - - - - -\n";
          }
      }
      echo "<!--- END -->";
      

      7.1.25 - 7.3.4 的输出

      <!--- BEGIN -->
      Name: object 1
      Code: y001
      Date: 2018-01-01T23:00:00-0600
      - - - - - -
      Name: object 2
      Code: y002
      Date: 2018-01-01T23:00:00-0600
      - - - - - -
      <!--- END -->
      

      工作演示: https://3v4l.org/ajnOG

      【讨论】:

        【解决方案3】:

        此脚本可能会帮助您设计和输出所需的字符串。它适用于$element["B"]。您可以简单地为数组的其他元素编写类似的foreach,例如$element["A"]

        $url = './data.json';
        $data = file_get_contents($url);
        $output = "<!--- File contents -->\n";
        $contents = json_decode($data, true);
        $output .= "<!--- Associative Array -->\n";
        
        $output .= "<!--- BEGIN -->\n";
        foreach ($contents as $elements) {
            if (!$elements["B"]) {continue;} // You might remove this and add other elements of your inputs such as $elements["A"]
            foreach ($elements["B"] as $key => $element) {
                $output .= "Name: " . $element['name'] . "\n";
                $output .= "Code: " . $element['code'] . "\n";
                $output .= "Date: " . $element['date'] . "\n";
                $output .= "- - - - - -\n";
            }
        
        }
        $output .= "<!--- END -->\n";
        
        echo $output;
        

        你可能不需要逐行回显,你可以将它存储在一个变量中,例如$output,最后是echo $output;

        输出:

        <!--- File contents -->
        <!--- Associative Array -->
        <!--- BEGIN -->
        Name: object 1
        Code: y001
        Date: 2018-01-01T23:00:00-0600
        - - - - - -
        Name: object 2
        Code: y002
        Date: 2018-01-01T23:00:00-0600
        - - - - - -
        <!--- END -->
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多