php - PHP循环如果相同的键则合并值
问题描述
抱歉,我的英语不好,我想在这里询问重复的问题,答案可能不是我的情况,我有一个由多个数组 $_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]);
}
这是我的 $arr2 结果:
打印_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"]}
推荐阅读
- javascript - 小胡子从循环中得到“这个”
- sql - Oracle:按十年分组数据
- java - Java 1.8 版能否生成与 Java 1.6 版相同的 SecureRandom 值?
- postgresql - 为什么 autovacuum 没有运行
- php - PHP - 如何获得多维数组的总和?
- c - 如何从线程中检索和比较结果值?
- c# - 用于带有 Microsoft IoT 的 UWP 应用程序的 C# Logger
- python - 使用神经网络(使用 python)进行医学图像分类的简单方法,无需在我的机器上进行训练
- android - Google Maps Android Sdk 集成,无需计费帐户(无需信用卡)
- java - 存储 DStream、检查点、持久化?