修复解码JSON时的PHP条件
我正在用php解码一个json文件 在修复解码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_
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);
}
}
}