为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 中通过键更新现有 JSON 数据中的值

在 PHP 中通过键更新现有 JSON 数据中的值

PHP
MM们 2023-10-22 21:48:13
我有 JSON 数据,想通过键更新值。JSON:{ "language":"en", "education":[                {                   "unit":"e1",                   "language":"en"                 }              ], "membership":[                {                  "uei":"21",                  "Uifed":"failed"                }              ]}我想将“失败”的值更改uifed为“成功”。我做了什么?$json = '{"language":"en","education":[{"unit":"e1","language":"en"}],"membership":[{"uei":"21","Uifed":"failed"}]}';$arrayData = json_decode($json, true);$replacementData = array('Uifed' => 'success');$newArrayData = array_replace_recursive($arrayData, $replacementData);echo var_dump($newArrayData);结果:NULL我怎样才能做到这一点?
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

事情不是这样的array_replace_recursive;替换数组需要与您要替换的数组具有相同的结构。对于您的示例数据,这将起作用:

$json = '{"language":"en","education":[{"unit":"e1","language":"en"}],"membership":[{"uei":"21","Uifed":"failed"}]}';

$arrayData = json_decode($json, true);

$replacementData = array('membership' => array(array('Uifed' => 'success')));

$newArrayData = array_replace_recursive($arrayData, $replacementData);


print_r($newArrayData);

输出:


Array

(

    [language] => en

    [education] => Array

        (

            [0] => Array

                (

                    [unit] => e1

                    [language] => en

                )

        )

    [membership] => Array

        (

            [0] => Array

                (

                    [uei] => 21

                    [Uifed] => success

                )

        )


)

array_walk_recursive可以用来做你想做的事:


$replacementData = array('Uifed' => 'success');

array_walk_recursive($arrayData, function (&$value, $key) use ($replacementData) {

    $value = $replacementData[$key] ?? $value;

});


print_r($arrayData);

输出:


Array

(

    [language] => en

    [education] => Array

        (

            [0] => Array

                (

                    [unit] => e1

                    [language] => en

                )

        )

    [membership] => Array

        (

            [0] => Array

                (

                    [uei] => 21

                    [Uifed] => success

                )

        )

)

3v4l.org 上的演示


查看完整回答
反对 回复 2023-10-22
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

通过引用foreach传递值的简单示例:


$json = '{"language":"en","education":[{"unit":"e1","language":"en"}],"membership":[{"uei":"21","Uifed":"failed"}]}';

$arrayData = json_decode($json, true);

foreach ($arrayData['membership'] as &$membership) {

    if ('failed' === $membership['Uifed']) {

        $membership['Uifed'] = 'success';

    }

}

print_r($arrayData);

小提琴



查看完整回答
反对 回复 2023-10-22
  • 2 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信