php - 在 PHP 中从 Json 中提取关键元素

标签 php arrays json loops

我需要在 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元素

最佳答案

此脚本可能会帮助您设计和输出所需的字符串。它适用于$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 -->

关于php - 在 PHP 中从 Json 中提取关键元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821622/

相关文章:

php - 获取两个不同表mysql的结果

JavaScript多维获取值,无需循环

android - 如何使用动态响应键解析 json

javascript - 如何在读取文件时在 JSON.parse() 之前删除特殊字符

json - Postgres 选择作为 json 散列

PHP 正则表达式替换相似字符串中某个字符的所有实例

php - 这个sql代码有什么问题?

php - 使用 ASP、ASP.NET 2.0 或 PHP5 在 IIS6 上无超时的开源文件上传

arrays - 二维数组排序问题

javascript - 如何使用underscore.js创建一个组