合并数组项特定的数组项

时间:2012-01-13 12:47:19

标签: php arrays merge

我得到了这个数组:

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];和[4][5]。如果有一个字母,然后是一个点(k。),它必须与下面的数组项合并。

任何可以帮助我的人:)?

4 个答案:

答案 0 :(得分:2)

怎么样:

$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.
)

答案 1 :(得分:0)

尝试使用正则表达式来测试数组的所有条目。
如果发生了事件,则将您的entrie的值与下一个值相连。

答案 2 :(得分:0)

我可能会做以下(伪代码):

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

答案 3 :(得分:0)

我会尝试这样的事情:

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

}