繁体   English   中英

无法更改数组php中的值

[英]Can't change value in array php

{
    "available":18,
    "bind":0,
    "info":"",
    "hours_definitions":[
        {
            "value":"21:40"
        },
        {
            "value":"22:50"
        }
    ],
    "hours":{
        "21:40":{
            "available":1,
            "bind":0,
            "info":"",
            "notes":"",
            "price":3000,
            "promo":0,
            "status":"available"
        },
        "22:50":{
            "available":1,
            "bind":0,
            "info":"",
            "notes":"",
            "price":3000,
            "promo":0,
            "status":"available"
        }
    },
    "notes":"",
    "price":2000,
    "promo":0,
    "status":"available"
}

我有JSON数组( $ dataar ),我需要将“小时”数组21:40的“ available”更改为0。

我正在尝试使用foreach:

$dataar1 = json_decode($dataar, true);
$dataar2 = $dataar1['hours'];
$hour = "21:40";
foreach ($dataar2 as $key => $entry) {
     if ($key == $hour) {
        $dataar2[$key]['available'] = 0;
    }
}

我得到$dataar2[$key]['available'] = 0 ,但是当我尝试对其进行json_encode时,我再次看到available:1。

我该如何解决?

您并没有按说改变实际变量,只是将其分配给新变量并进行更改。 这将起作用:

$dataar1 = json_decode($dataar, true);

foreach($dataar1['hours'] as $key => &$val) {
    if($key == '21:40') {
        $val['available'] = 0;
    }
}

上面的示例使用PHP's passing by-reference来修改原始数组。

Example

您只需要更改$ dataar2,它是一个新变量,与原始变量无关。 尝试以下方法:

$dataar1 = json_decode($dataar, true);
$hour = "21:40";
foreach ($dataar1['hours'] as $key => $entry) {
     if ($key == $hour) {
        $dataar1['hours'][$key]['available'] = 0;
    }
}
$dataar = json_encode($dataar1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM