Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复解码JSON时的PHP条件_Php_Json - Fatal编程技术网

修复解码JSON时的PHP条件

修复解码JSON时的PHP条件,php,json,Php,Json,我正在用php解码一个json文件 在foreach语句中,我检查我的cd_驱动程序是否在来自json文件内容的数组中。如果它在数组中,脚本将按预期更新其月份。如果没有,脚本会将新驱动程序写入json文件 一切正常,但在更新月份并将相同的驱动程序添加到json文件后,它也在执行else条件。为什么会这样 $dados[] = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_

我正在用php解码一个json文件

foreach
语句中,我检查我的cd_驱动程序是否在来自json文件内容的数组中。如果它在数组中,脚本将按预期更新其月份。如果没有,脚本会将新驱动程序写入json文件

一切正常,但在更新月份并将相同的驱动程序添加到json文件后,它也在执行
else
条件。为什么会这样

$dados[] = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$dados2 = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$jsonString = file_get_contents('bsaldo.json');
$data = json_decode($jsonString, true);

    if($data == ""){
        $newString = json_encode($dados);
        file_put_contents('bsaldo.json', $newString);
    }else {
        foreach ($data as $key => $value) {

            $mot = $value['cd_driver'];
            $array = array();
            array_push($array, $mot);

            if(in_array($cd_driver, $array)){
                $data[$key]['month'] = $cd_month;
                $newString = json_encode($data);
                file_put_contents('bsaldo.json', $newString);
            }else {
                array_push($data, $dados2);
                $finalString = json_encode($data);
                file_put_contents('bsaldo.json', $finalString);
            }

        }
    }
json:


我必须调整一些东西来使用PHP5.1。

您的问题是在循环的每次迭代中都要重置数组。将其移到
foreach
之外,如下所示:

$dados[] = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$dados2 = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$jsonString = file_get_contents('bsaldo.json');
$data = json_decode($jsonString, true);

    if($data == ""){
        $newString = json_encode($dados);
        file_put_contents('bsaldo.json', $newString);
    }else {
        $array = array(); # here it won't be continually reset and can accumulate values as intended.
        foreach ($data as $key => $value) {

            $mot = $value['cd_driver'];

            array_push($array, $mot);

            if(in_array($cd_driver, $array)){
                $data[$key]['month'] = $cd_month;
                $newString = json_encode($data);
                file_put_contents('bsaldo.json', $newString);
            }else {
                array_push($data, $dados2);
                $finalString = json_encode($data);
                file_put_contents('bsaldo.json', $finalString);
            }

        }
    }

$cd\u驱动程序
在代码中似乎未定义。请参阅
$mot=$value['cd_驱动程序]
然后重置此
$array=array()在每次迭代中。所以
[$mot]
与该数组相同。或者
$cd\u driver==$mot
您在每个循环中清空$array本质上这就是您正在做的,
if(undefined=$mot){
-:)-而不是
if(in\u array($cd\u driver,$array)){
,当然这将取决于
}else{
条件的一部分。
我必须调整一些东西来使用PHP5.1
PHP5.x已经差不多完成了,这提醒我需要从
5.6
升级我的服务器,你说
未定义的
是什么意思?因为循环?它将驱动程序更新到文件中。很好。我应该已经完成了。它解决了第o部分f问题。现在我需要找到一种方法将该
else
移出循环,因为它根据找到的寄存器数执行多次。如果这解决了您的问题,我建议您给出正确答案并提出新问题。我认为这仍然是问题的一部分,但无论如何,谢谢。
$dados[] = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$dados2 = array('cd_driver' => $cd_driver, 'Driver' => $RSx["ds_name"], 'month' => $cd_month, 'bsaldo' => $saldoToJson);
$jsonString = file_get_contents('bsaldo.json');
$data = json_decode($jsonString, true);

    if($data == ""){
        $newString = json_encode($dados);
        file_put_contents('bsaldo.json', $newString);
    }else {
        $array = array(); # here it won't be continually reset and can accumulate values as intended.
        foreach ($data as $key => $value) {

            $mot = $value['cd_driver'];

            array_push($array, $mot);

            if(in_array($cd_driver, $array)){
                $data[$key]['month'] = $cd_month;
                $newString = json_encode($data);
                file_put_contents('bsaldo.json', $newString);
            }else {
                array_push($data, $dados2);
                $finalString = json_encode($data);
                file_put_contents('bsaldo.json', $finalString);
            }

        }
    }