在 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
中使用未经处理的它们
我正在尝试访问我发送到 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