在php 7.2中遍历嵌套数组

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

我正在尝试访问发送到我的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}"
]
php lumen
3个回答
0
投票

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


0
投票

您的数据是一个字符串,您需要先对其进行解码并通过调用其键来获取值


0
投票

在您的情况下,$data['inputs']是JSON编码的字符串,您从中删除了[]字符,因此当您尝试访问其第一个元素时,它是第一个字符(因为字符串kind of] > PHP中的字符串数组,它们实际上是C中的字符串数组)。

问题是,您首先调用json_encode()。如果这是清除输入的方式,那么您做错了。由于您使用的是ORM,因此真正不需要手动清理输入。只需保持客户端发送的输入并执行所有操作,然后在QueryBuilder中使用未经过滤的操作即可]

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.