【问题标题】:Can't change value in array php无法更改数组php中的值
【发布时间】:2015-03-20 15:04:20
【问题描述】:
{
    "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),我需要将“可用”更改为 0,其中“小时”数组 21:40。

我正在尝试使用 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。

我该如何解决?

【问题讨论】:

  • 添加用于将其编码回 JSON 的代码 - 我认为您可能没有对正确的变量进行编码。

标签: php arrays json foreach


【解决方案1】:

您只是更改了 $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);

【讨论】:

    【解决方案2】:

    你并没有改变实际变量,你只是将它分配给一个新变量并改变它。这将起作用:

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

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

    Example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2011-03-24
      • 2021-10-28
      • 1970-01-01
      • 2014-11-08
      • 2014-06-14
      • 2021-09-15
      相关资源
      最近更新 更多