2012-01-13 4 views
-1

Я получил этот массив:слияния элементы массива конкретных элементов массива

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], потому что К. vrachtschip должны быть вместе. та же жопа [2] и [3]; и [4] с [5]. если есть 1 буква, а затем точка (к.), она должна быть объединена со следующим элементом массива.

Любой, кто может мне помочь :)?

ответ

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. 
) 
+0

+1 Хороший. Тем не менее, вы рискуете отказаться от инициализации, если последний в массиве (возможно, никогда не будет), или несколько строк (опять же, возможно, не имеет значения) ([demo] (http://www.ideone.com/ clone/UQeZ6)) – jensgram

+0

@jensgram: хороший улов, я отредактировал ответ соответственно. – Toto

0

Попробуйте использовать регулярное выражение для проверки всех записей вашего массива.
Если возникновение происходит, сравните значение вашего entrie со следующим.

+1

Что с 's.length == 2 && s [1] == '.' '? –

0

я бы, вероятно, сделать следующее (псевдокод):

  1. Создать пустой массив для результата
  2. итерацию исходный массив
  3. Для каждого значения: оно соответствует /^[a-z]\.$/i?
  4. Если да, посмотрите, содержит ли исходный массив следующий элемент?
  5. Если да, соедините два элемента и добавьте в результирующий массив, пропустите следующий элемент в цикле
  6. Если нет (стр. 4 или 5), добавьте непосредственно в результирующий массив.
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]; 
    } 

} 
Смежные вопросы