将JSON数据从多个嵌套数组转换为PHP变量

问题描述 投票:0回答:3

我在数组中有一个JSON数组:

{
 layouts: [
    {
      w: 6,
      h: 4,
      x: 0,
      y: 0,
      i: "n0",
      minW: 1.5,
      minH: 1,
      maxH: 1000,
      moved: false,
      static: false,
      widget: "Clock"
    },
    {
      w: 2,
      h: 2,
      x: 0,
      y: 4,
      i: "n1",
      minW: 1,
      minH: 1,
      maxH: 1000,
      moved: false,
      static: false,
      widget: "Weather"
     }
  ]
}

我需要将每个小部件布局存储在数据库中。当我尝试执行查询时它返回值为空的错误。我尝试了here的一些例子,但它们对我不起作用。

功能:

public function store(Request $request)
{

    $JSON = json_decode($request);

    foreach (array($JSON) as $data) {

        $i = 0;

        $w = $data[$i]['w'];
        $h = $data[$i]['h'];
        $x = $data[$i]['x'];
        $y = $data[$i]['y'];
        $i = $data[$i]['i'];
        $minW = $data[$i]['minW'];
        $minH = $data[$i]['minH'];
        $maxH = $data[$i]['maxH'];
        $moved = $data[$i]['moved'];
        $static = $data[$i]['static'];
        $type = $data[$i]['type'];

        DB::table('widgets')->insert(
            ['w' => $w,
             'h' => $h,
             'x' => $x,
             'y' => $y,
             'i' => $i,
             'minW' => $minW,
             'minH' => $minH,
             'maxH' => $maxH,
             'moved' => $moved,
             'static' => $static,
             'type_widget' => $type]
        );

        $i++;

    }

    return response()->json(201);
}

谁能告诉我循环数据保存它的正确方法是什么?

php arrays json
3个回答
1
投票

当你成功使用Sven Hakvoorts的答案时,这里是你的foreach的缩短版

$i = 0;
$data = json_decode($request, true);
while (isset($data['layouts'][$i])) {
    DB::table('widgets')->insert($data['layouts'][$i]);
    $i++;
}

甚至更短(和最好的方式):

foreach ($data['layouts'] as $row) {
    DB::table('widgets')->insert($row);
}

我认为你只需重命名一列就可以使这个短代码工作:输入type_widget,这样你的字段和列名相同,这会导致代码更短,你可以看到。


3
投票

您需要使用json_decode($array, true)第二个参数(true)表示需要将输入字符串转换为关联数组,从而正确解析您的JSON。

您还可以使用Request直接从$request->all()中提取JSON。我会推荐这种方法,因为这样更容易,并且数组将始终被正确解析。解码Request对象可能会导致与最初提交的数组格式不同(除了数据之外还包含Request对象本身的数据)。


0
投票

1.

$JSON = json_decode($request);

改为

$JSON = json_decode($request,true);

2.从foreach循环中删除$ i = 0并将其放在befor foreach循环中

© www.soinside.com 2019 - 2024. All rights reserved.