动态地为php中的多维数组赋值

时间:2017-02-17 14:47:39

标签: php arrays json multidimensional-array foreach

我得到了一个多维数组作为json_decode的结果:

$start=new DateTime();
$jzon='[{"latitude":41.9089983,"longitude":12.4778983,"mVersionCode":1, "data":""},
{"latitude":41.9091,"longitude":12.4781983,"mVersionCode":1, "data":""},
{"latitude":41.9087983,"longitude":12.4786,"mVersionCode":1, "data":""},
{"latitude":41.9082,"longitude":12.4793,"mVersionCode":1, "data":""},
{"latitude":41.9065,"longitude":12.4811983,"mVersionCode":1, "data":""},
{"latitude":41.9061983,"longitude":12.4819983,"mVersionCode":1, "data":""},
{"latitude":41.9063983,"longitude":12.4827983,"mVersionCode":1, "data":""},
{"latitude":41.9089983,"longitude":12.4840983,"mVersionCode":1, "data":""}]';

$arrayJson=json_decode($jzon, TRUE);

然后我尝试不同的方式来遍历数组,我找到的更有用的是这个:

if (json_last_error() === JSON_ERROR_NONE) {
    // JSON is valid
    foreach($arrayJson as $cell) {
        foreach($cell as $key=>$value) {    
            if($key=='data') {
                $value=$start->format('Y-m-d\ H:i:s');
                $start=$start->modify('+1 seconds');                    
            }
        }
    }
} else {
    echo " not valid Json";
}

我尝试过一些不同的方法来分配字段"数据" start的值,但如果var_dump对象$arrayJson,则没有设置值!

$cell[$value]=$start;不起作用! $value= $something;无效!

2 个答案:

答案 0 :(得分:2)

正如评论中已经提到的那样,通过引用使用。也没有必要使用内部循环,您可以直接访问“数据”成员:

foreach($arrayJson as &$cell)
{
    $cell['data'] = $start->format('Y-m-d\ H:i:s');
    $start=$start->modify('+1 seconds');
}

答案 1 :(得分:1)

前往罗马的一种方式:(使用参考资料)

if (json_last_error() === JSON_ERROR_NONE) {
  // JSON is valid
  foreach($arrayJson as &$cell)//<--- reference here
  {
   $cell['data'] = $start->format('Y-m-d\ H:i:s');
   $start = $start->modify('+1 seconds');                 
  }
} else { 
  echo " not valid Json"; 
}