在 php 7.2 中循环遍历嵌套数组

Looping through nested arrays in php 7.2

我正在尝试访问我发送到 API 的嵌套数组中的值,但是当执行类似 $data['inputs']{0} 的操作时,它只会返回第一个字母当我想要的是值的整个值而不是键时,键的值但是如果我尝试类似 $data['inputs']['type'] 它给了我一个偏移错误我知道如何以我需要的方式正确访问值

public function saveEdit(Request $request)
{
    try {
        $unsanitizedData = $request->all();
        $data = [];
        $fid = $unsanitizedData['formId'];
        $data['form_name'] = json_encode($unsanitizedData['cred']['name']);
        $data['org'] = json_encode($unsanitizedData['cred']['organization']);
        $data['updated_by'] = json_encode($unsanitizedData['updatedBy']);
        $data['user_id'] = json_encode($unsanitizedData['id']);
        $data['activated'] = json_encode($unsanitizedData['cred']['activated']);
        $data['inputs'] = json_encode($unsanitizedData['cred']['inputs']);
        $pattren = array("[","]","'",'"',"/","\");
        $data = str_replace($pattren,'', $data);
        foreach ($unsanitizedData as $st) {
            admin_form::where('id', $fid)->update([
                'form_name' => $data['form_name'],
                'org' => $data['org'],
                'updated_by' => $data['updated_by'],
                'user_id' => $data['user_id'],
                'activated' => $data['activated']
                ]);
                foreach ($data['inputs'] as $input) {
                    admin_form_fields::where('form_id', $fid)->update([
                        'type' => $input,
                        'name' => $input
                    ]);
                }
        }


        $res['status'] = true;
        $res['message'] = 'Success';
        return response($res, 200);
    } catch (\Illuminate\Database\QueryException $ex) {
        $res['status'] = false;
        $res['message'] = $ex->getMessage();
        return response($res, 500);
    }
}

我想如果我在另一个 foreach 循环中使用一个 foreach 循环,它会起作用,因为它是一个嵌套数组,所以循环遍历主数组,然后循环遍历嵌套数组,但这也不起作用

数据转储时的数据结构:

array:6 [
    "form_name"  => "Testname",
    "org"        => "TestOrg",
    "updated_by" => "test",
    "user_id"    => "29",
    "activated"  => "false",
    "inputs"     => "{type:number,name:Phone},{type:input,name:Name},{type:input,name:Address},{type:email,name:Email}"
]

据我所知,你只需要使用 json_decode($data['inputs']) 因为你的数组实际上只是一个字符串:)

在你的例子中,$data['inputs'] 是一个 JSON 编码的字符串,你已经从中删除了 [] 字符,所以当你尝试访问它的第一个元素时它是第一个字符(因为字符串在 PHP 中是 字符串数组,它们实际上是 C 中的字符串数组)。

问题是您首先调用了 json_encode()。如果这是您清理输入的方式,那您就做错了。由于您使用的是 ORM,因此没有必要手动清理输入。只需保留客户端发送的输入并执行所有操作,然后在 QueryBuilder

中使用未经处理的它们