2012-01-13 37 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]

,因爲K. vrachtschip必須要裝配在一起。 相同的屁股[2][3];和[4][5]。如果有1個字母,然後是點(k。),則必須將它與以下數組項合併。

任何人都可以幫助我:)?

回答

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/克隆/ UQeZ6)) – jensgram 2012-01-13 13:04:18

+0

@jensgram:很好,我已經編輯了相應的答案。 – Toto 2012-01-13 13:10:29

0

嘗試使用正則表達式來測試數組的所有條目。
如果發生了,請將您的entrie的值與下一個值進行連接。

+1

什麼是錯的's.length == 2 && s [1] =='。''? – 2012-01-13 12:58:00

0

我可能會做以下(僞代碼):它匹配/^[a-z]\.$/i

  1. 的結果
  2. 迭代原數組
  3. 對於每個值創建空數組?
  4. 如果是,請查看原始數組是否包含下一個元素?
  5. 如果是,連接兩個項目並添加到結果數組中,跳過循環中的下一個項目
  6. 如果否(pt.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]; 
    } 

}