首页 > 解决方案 > 在 PHP 中用于 JSON 数据的 if 语句

问题描述

我有一些代码会查找名为 applications 的 JSON 字符串的分支,然后对于它找到的每个项目,它都会执行一些代码。

如果 JSON 包含“应用程序”,这可以正常工作,但如果不包含,则会失败。

我的 PHP

$json = file_get_contents("programs.json");
$array = json_decode($json, true);
foreach ($array['applications'] as $app) {
    $application = $app['application'];
    // Do some stuff
}

我的 JSON 看起来像这样:

{
    "hostname": "MINIPC025",
    "applications": [{
            "application": "7-Zip 19.00 (x64)"
        },
        {
            "application": "Active Directory Rights Management Services Client 2.1"
        },
        {
            "application": "Adobe Acrobat Reader DC MUI"
        }
    ]
}

所以我的问题是 - 是否可以放置某种 if 语句,如果applications属性存在,则仅循环遍历 JSON 数据的应用程序位。

谢谢你。

标签: phparraysjson

解决方案


正如他们所说,有很多通往罗马的路。一个简单if的,你可以在其中使用各种原生 PHP 函数,也可以使用 null-coalescing 运算符??

$array['applications']他们最终都有相同的想法——如果存在就迭代。但是,这些检查都不会真正检查它是否是可迭代变量,因此如果是$array['applications'] = 'myString';,您仍然会收到错误。您可以使用原生 PHP 函数is_iterable()来检查。

使用空合并运算符??

foreach ($array['applications'] ?? [] as $app) {
    // ...
}

使用array_key_exists()

if (array_key_exists('applications', $array)) {
    foreach ($array['applications'] as $app) {
        // ...
    }
}

使用isset()

if (isset($array['applications'])) {
    foreach ($array['applications'] as $app) {
        // ...
    }
}

使用!empty()

if (!empty($array['applications'])) {
    foreach ($array['applications'] as $app) {
        // ...
    }
}

在上述内容中,我建议使用isset()/!empty()或 null-coalescing 运算符,因为array_key_exists()对于$array['applications'] = null;.

一些有用的相关阅读


推荐阅读