php - 如何在 PHP 中合并选定的数组元素?
问题描述
我有一个数组
$array = array (
0 => array( 'name' => 'zero'),
1 => array( 'name' => 'one'),
2 => array( 'name' => 'two'),
3 => array( 'name' => 'three'),
4 => array( 'name' => 'four'),
5 => array( 'name' => 'five'),
6 => array( 'name' => 'six'),
);
我需要根据模式合并一些元素
$pattern = array(
array('from'=>1, 'to'=>2, 'note'=>'something'),
array('from'=>3, 'to'=>5, 'note'=>'something'),
array('from'=>6, 'to'=>6, 'note'=>'something'),
);
如何合并元素以获得数组
$ result = array(
['0'] => array('name'=>'zero'),
['1,2'] => array('name'=>'one+two', 'note'=>'something'),
['3,4,5'] => array('name'=>'three+four+five', 'note'=>'something'),
['6'] => array('name'=>'six', 'note'=>'something'),
);
我知道我应该在一个循环中迭代一个数组并检查另一个数组是否有相应的元素来创建一个新数组,但是我应该迭代哪一个呢?
解决方案
如果数组键实际上并不重要,那么我会这样做:
$result = $processed = [];
foreach($pattern as $p) { // loop over the patterns
$temp = [];
for($i = $p['from']; $i <= $p['to']; ++$i) { // loop over from -> to
$temp[] = $array[$i]['name']; // collect names of those items
$processed[] = $i; // store index of item as an already processed one
}
$result[] = ['name' => implode('+', $temp), 'note' => $p['note']];
}
$temp = [];
foreach($array as $key => $item) {
if(!in_array($key, $processed)) { // if index is not in list of already processed items
$temp[] = $item['name'];
}
}
array_unshift($result, ['name' => implode('+', $temp)]); // add to front of result
这将为您提供表格的结果
Array
(
[0] => Array
(
[name] => zero
)
[1] => Array
(
[name] => one+two
[note] => something
)
[2] => Array
(
[name] => three+four+five
[note] => something
)
[3] => Array
(
[name] => six
[note] => something
)
)
推荐阅读
- aws-lambda - 如何使用 Cloud Watch 事件将在 AWS Glue 作业中处理后的 S3 输入文件名(S3 文件)发送到 AWS Lambda?
- android - 如何定期执行 android 位置检查?
- android - 如何使用短信组件记录号码和短信?
- c++ - winsock 服务器不接受连接
- ansible - Playbook 中的 Ansible 循环以在 RHEL 中创建用户
- r - 如何为我的热图创建特定的颜色渐变比例?
- c# - 继承初始化的字段
- indy10 - 哪个 Openssl 版本与 Indy 10 版本 5519 和 5438 兼容?
- angular - 如何在组件中使用 bypassSecurityTrustHtml 进行高亮显示?
- windows - 在 VB 中打开 Windows 10 通用应用程序中的现有视图?