合并数组项特定数组项


merge array items specific array items

我得到了这个数组:

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];
   }
}

我可能会执行以下操作(伪代码(:

  1. 为结果创建空数组
  2. 迭代原始数组
  3. 对于每个值:它是否与/^[a-z]'.$/i匹配?
  4. 如果是,请查看原始数组是否包含下一个元素?
  5. 如果是,连接两个项目并添加到生成的数组中,循环跳过下一个项目
  6. 如果没有(第 4 或 5 点(,则直接添加到生成的数组中。