我得到了这个数组:
array (
0 => 'K.',
1 => 'Vrachtschip',
2 => 'L.',
3 => 'Gevechtsschip',
4 => 'Z.',
5 => 'Gevechtsschip',
6 => 'Kruiser',
7 => 'Slagschip',
8 => 'Bommenwerper',
9 => 'Vernietiger',
10 => 'Interceptor.',
)
我可以将[0]
的项目与[1]
合并吗,因为 K. vrachtschip 必须在一起。同样的屁股[2]
和[3]
;并与[5]
[4]
.如果有 1 个字母,然后是一个点 (k.(,则必须将其与以下数组项合并。
有人可以帮助我:)吗?
怎么样:
$arr = array (
'K.',
'Vrachtschip',
'L.',
'Gevechtsschip',
'Z.',
'Gevechtsschip',
'Kruiser',
'Slagschip',
'Bommenwerper',
'Vernietiger',
'Interceptor',
'B.',
);
$concat = '';
$result = array();
foreach ($arr as $elem) {
if (preg_match('/^[A-Z]'.$/', $elem)) {
$concat = $elem;
continue;
}
$result[] = $concat.$elem;
$concat = '';
}
if ($concat) $result[] = $concat;
print_r($result);
输出:
Array
(
[0] => K.Vrachtschip
[1] => L.Gevechtsschip
[2] => Z.Gevechtsschip
[3] => Kruiser
[4] => Slagschip
[5] => Bommenwerper
[6] => Vernietiger
[7] => Interceptor
[8] => B.
)
尝试使用正则表达式来测试数组的所有条目。
如果确定了一个事件,请将条目的值与下一个条目连接起来。
我会尝试这样的事情:
for($idx=0, $max = count($array_in); $idx < $max; $idx++)
{
if(preg_match('/^[a-z]'.$/i', $array_in[$idx]))
{
$array_out[] = $array_in[$idx].$array_in[$idx+1];
$idx++;
}
else
{
$array_out[] = $array_in[$idx];
}
}
我可能会执行以下操作(伪代码(:
- 为结果创建空数组
- 迭代原始数组
- 对于每个值:它是否与
/^[a-z]'.$/i
匹配? - 如果是,请查看原始数组是否包含下一个元素?
- 如果是,连接两个项目并添加到生成的数组中,循环跳过下一个项目
- 如果没有(第 4 或 5 点(,则直接添加到生成的数组中。