对不起,我的英语不好,我想在这里问重复的问题,答案这么多,也许不是在我的情况下,我有一个由多个数组生成的数组 $_POST 像
<input type="checkbox" class="styled" data-controller="company-group" data-action="index" name="checkbox[company-group][index]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="create" name="checkbox[company-group][create]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="update" name="checkbox[company-group][update]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="delete" name="checkbox[company-group][delete]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="index" name="checkbox[company-industry][index]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="create" name="checkbox[company-industry][create]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="update" name="checkbox[company-industry][update]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="delete" name="checkbox[company-industry][delete]" value="1" checked="">
$_POST["复选框"]
checkbox: checkbox%5Bcompany-group%5D%5Bindex%5D=1&checkbox%5Bcompany-group%5D%5Bview%5D=1&checkbox%5Bcompany-group%5D%5Bcreate%5D=1&checkbox%5Bcompany-group%5D%5Bupdate%5D=1&checkbox%5Bcompany-group%5D%5Bdelete%5D=1&checkbox%5Bcompany-industry%5D%5Bindex%5D=1&checkbox%5Bcompany-industry%5D%5Bview%5D=1&checkbox%5Bcompany-industry%5D%5Bcreate%5D=1&checkbox%5Bcompany-industry%5D%5Bupdate%5D=1&checkbox%5Bcompany-industry%5D%5Bdelete%5D=1
我有这个代码的句柄:
$asi = urldecode($_POST['checkbox']);
$asu = explode('&', $asi);
$arr = array();
$arr2 = array();
foreach ($asu as $key)
{
list ($ass, $iss) = explode('=', $key);
preg_match_all('/[(.*?)]/', $ass, $sue);
$arr2[] = array_merge_recursive($sue[1]);
}
这是我的 $arr 2 结果:
print_r((
Array
(
[0] => Array
(
[0] => company-group
[1] => index
)
[1] => Array
(
[0] => company-group
[1] => view
)
[2] => Array
(
[0] => company-group
[1] => create
)
[3] => Array
(
[0] => company-group
[1] => update
)
[4] => Array
(
[0] => company-group
[1] => delete
)
[5] => Array
(
[0] => company-industry
[1] => index
)
[6] => Array
(
[0] => company-industry
[1] => view
)
[7] => Array
(
[0] => company-industry
[1] => create
)
[8] => Array
(
[0] => company-industry
[1] => update
)
[9] => Array
(
[0] => company-industry
[1] => delete
)
)
var_export((
array (
0 =>
array (
0 => 'company-group',
1 => 'index',
),
1 =>
array (
0 => 'company-group',
1 => 'view',
),
2 =>
array (
0 => 'company-group',
1 => 'create',
),
3 =>
array (
0 => 'company-group',
1 => 'update',
),
4 =>
array (
0 => 'company-group',
1 => 'delete',
),
5 =>
array (
0 => 'company-industry',
1 => 'index',
),
6 =>
array (
0 => 'company-industry',
1 => 'view',
),
7 =>
array (
0 => 'company-industry',
1 => 'create',
),
8 =>
array (
0 => 'company-industry',
1 => 'update',
),
9 =>
array (
0 => 'company-industry',
1 => 'delete',
),
)
json_encode((
[["company-group","index"],["company-group","view"],["company-group","create"],["company-group","update"],["company-group","delete"],["company-industry","index"],["company-industry","view"],["company-industry","create"],["company-industry","update"],["company-industry","delete"]
如何在循环时合并同一键上的值,我的愿望结果是:
Array
(
[0] => Array
(
[key] => company-group
[val] => Array (
[0] => index,
[1] => create,
[2] => update,
[3] => delete,
)
)
[1] => Array
(
[key] => company-industry
[val] => Array (
[0] => index,
[1] => create,
[2] => update,
[3] => delete,
)
)
)
感谢您的建议!
如果您要将所有这些复选框数据作为 json 集中到表列中,那么我将建议在对数据进行 json 编码之前使用更精简的数组结构。
parse_str()
会将查询字符串格式的数据转换为所需的关联数组关联数组(每个值都1
(。
从那里,覆盖子数组以将键移动到值,然后生成 json 数组。
现在,您的数据可以简单地作为紧凑的可移植字符串插入到数据库中。
代码:(演示(
$_POST['checkbox'] = 'checkbox%5Bcompany-group%5D%5Bindex%5D=1&checkbox%5Bcompany-group%5D%5Bview%5D=1&checkbox%5Bcompany-group%5D%5Bcreate%5D=1&checkbox%5Bcompany-group%5D%5Bupdate%5D=1&checkbox%5Bcompany-group%5D%5Bdelete%5D=1&checkbox%5Bcompany-industry%5D%5Bindex%5D=1&checkbox%5Bcompany-industry%5D%5Bview%5D=1&checkbox%5Bcompany-industry%5D%5Bcreate%5D=1&checkbox%5Bcompany-industry%5D%5Bupdate%5D=1&checkbox%5Bcompany-industry%5D%5Bdelete%5D=1';
parse_str($_POST['checkbox'], $output);
var_export($output['checkbox']);
echo "n---n";
echo json_encode(array_map('array_keys', $output['checkbox']));
输出:
array (
'company-group' =>
array (
'index' => '1',
'view' => '1',
'create' => '1',
'update' => '1',
'delete' => '1',
),
'company-industry' =>
array (
'index' => '1',
'view' => '1',
'create' => '1',
'update' => '1',
'delete' => '1',
),
)
---
{"company-group":["index","view","create","update","delete"],"company-industry":["index","view","create","update","delete"]}
只回答你的问题,如何转换 arr2。
您可以循环数组并构建一个新数组。
使用post数组很可能有更好的方法,但我的午休时间已经结束,所以我把它留给Mickmack。
Foreach($arr2 as $sub){
$new[$sub[0]]["key"] = $sub[0];
$new[$sub[0]]["val"][] = $sub[1];
}
Var_dump(array_values($new));
https://3v4l.org/HKM7S
与其使用key
作为键,不如使用实际的数组键。
foreach ($asu as $key)
{
list ($ass, $iss) = explode('=', $key);
preg_match_all('/[(.*?)]/', $ass, $sue);
$arr2[$key][] = $sue[1];
}
简短回答:
$result=[];
foreach ($_POST["checkbox"] as $i=>$checkbox){
$result[]=["key"=>$i,"val"=>array_keys($checkbox)];
}
echo "<pre>";
var_export($result);
echo "</pre>";
?>
如果使用jQuery,请阅读此链接以发送对象,如果使用文本查询字符串将其转换为:parse_str($_POST["checkbox"], $array);
PHP 默认行为为:
<?php
echo "<pre>";
var_dump($_POST);
echo "</pre>";
?>
<form action="test.php" method="post">
<input type="checkbox" class="styled" data-controller="company-group" data-action="index" name="checkbox[company-group][index]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="create" name="checkbox[company-group][create]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="update" name="checkbox[company-group][update]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-group" data-action="delete" name="checkbox[company-group][delete]" value="1" checked="">
<br>
<input type="checkbox" class="styled" data-controller="company-industry" data-action="index" name="checkbox[company-industry][index]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="create" name="checkbox[company-industry][create]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="update" name="checkbox[company-industry][update]" value="1" checked="">
<input type="checkbox" class="styled" data-controller="company-industry" data-action="delete" name="checkbox[company-industry][delete]" value="1" checked="">
<input type="submit">
结果:
array(1) {
["checkbox"]=>
array(2) {
["company-a"]=>
array(2) {
["index"]=>
string(1) "1"
["delete"]=>
string(1) "1"
}
["company-b"]=>
array(3) {
["create"]=>
string(1) "1"
["update"]=>
string(1) "1"
["delete"]=>
string(1) "1"
}
}
}
为了你的愿望:
<?php
$result=[];
foreach ($_POST["checkbox"] as $i=>$checkbox){
$temp=["key"=>$i];
foreach ($checkbox as $val_key=>$val){
$temp["val"][]=$val_key;
}
$result[]=$temp;
}
echo "<pre>";
var_export($result);
echo "</pre>";
方法2:
$result=[];
foreach ($_POST["checkbox"] as $i=>$checkbox){
$result[]=["key"=>$i,"val"=>array_keys($checkbox)];
}
echo "<pre>";
var_export($result);
echo "</pre>";
?>