2011-03-11 47 views
0

我有一個看起來像下面的數組,我想檢查下一個elem是否以一個空格開始,如果是,將它連接到前一個elem。php數組迭代和連接

[1] => Array (
    [1] => lenny/volatile/main Packages 
    [2] => lenny/volatile/main Packages 
    [3] => lenny/volatile/main Sources 
    [4] => Reading package 
    [5] => lenny/volatile/main Sources 
) 

Output: 

[1] => Array (
    [1] => lenny/volatile/main Packages 
    [2] => lenny/volatile/main Packages 
    [3] => lenny/volatile/main Sources Reading package 
    [5] => lenny/volatile/main Sources 
) 

謝謝!

+0

正是我一直在尋找。謝謝大家! – Darrow11 2011-03-11 21:12:02

回答

3
$count = count($array); 
for($i = 0; $i < $count; $i++){ 
    if($array[$i][0] == ' '){ 
     if($i > 0){ 
      $array[$i-1] .= $array[$i]; 
      unset($array[$i]) 
     } 
    } 
} 

應該這樣做(即如果你的數組被命名爲$array,否則它滿足你的需求)

+1

他不希望以空格開頭的項目被刪除;他希望他們追加到前一個項目。 – Matchu 2011-03-11 20:52:25

+0

ahhhhh ha。解決它我去。沒有直接讀取 – Neal 2011-03-11 20:53:39

+0

我修正了它與正確的執行 – Neal 2011-03-11 20:54:48

1

一個辦法做到這一點檢出PHP demo

//your starting array 
$myarray = array("lenny/volatile/main Packages","lenny/volatile/main Packages", "lenny/volatile/main Sources", " Reading package", "lenny/volatile/main Sources"); 

$mystring = implode(",", $myarray); //implode array into a string delimited by , 
echo $mystring.PHP_EOL.PHP_EOL; //debug 

$mystring = str_replace(", ", ' ', $mystring); //str replace all ", " with ' ' 
echo $mystring.PHP_EOL.PHP_EOL; //debug 

$result= explode(',',$mystring); //explode back into an array with delimiter ',' 
print_r($result); //should give you final result 

輸出結果@邁克爾:

lenny/volatile/main Packages,lenny/volatile/main Packages,lenny/volatile/main Sources, Reading package,lenny/volatile/main Sources 

lenny/volatile/main Packages,lenny/volatile/main Packages,lenny/volatile/main Sources Reading package,lenny/volatile/main Sources 

    Array 
    (
     [0] => lenny/volatile/main Packages 
     [1] => lenny/volatile/main Packages 
     [2] => lenny/volatile/main Sources Reading package 
     [3] => lenny/volatile/main Sources 
    ) 
+1

可愛:)原始迭代可能明顯更快,但我喜歡簡單。 – Matchu 2011-03-11 20:58:18

+0

@matchu我喜歡少線,D謝謝。使它更乾淨w/comment – kjy112 2011-03-11 20:58:42

+0

我可能看起來錯了,但爆炸無能爲力,你只是通過一個空間去除所有的東西。我猜你要替換「‘用’,」(雙單空間) – Michael 2011-03-11 21:31:42

1

@manitor你忘了把值添加到previo我們排在刪除之前。

應該讀這樣的:

for($i = 0; $i < count($array); $i++){ 
    if($array[$i][0] == ' '){ 
     $array[$i-1].= $array[$i]; 
     unset($array[$i]); 
    } 
} 
0

這是完全未經測試的代碼,但它可能讓你在正確的軌道上。我會遍歷數組中的每一個。如果它很酷,請將它添加到新陣列中。如果沒有連接到前一個節點。我添加了一個指針,以便您的索引將保持打包在新數組中。

//$my_array already full of stuff 
$new_array = array(); 
$pointer = 0; 
for($i = 0; $i < count($my_array); $i++) { 
    if($i == 0) { 
     $new_array[$pointer] = $my_array[$i]; 
    } else { 
     $string = $my_array[$i]; 
     if(substr($string, 0, strlen($string) - 1) == ' ') { 
      $new_array[$pointer - 1] .= $string; 
     } else { 
      $new_array[$pointer] = $string; 
     } 
    } 
    $pointer++; 
} 
0

嘗試了一些異國情調的東西,只是爲了好玩;)試圖使用最少量的行來讓它工作。

陣列:

$myAr = Array(
    0 => "lenny/volatile/main Packages", 
    1 => "lenny/volatile/main Packages", 
    2 => "lenny/volatile/main Sources", 
    3 => " Reading package", 
    4 => "lenny/volatile/main Sources", 
); 

函數調用&邏輯(將丟棄該字符串是沒有先前項)

array_walk($myAr, 'concat', &$myAr); 

function concat($item, $key, $ar) { 
if(preg_match("/^(\s+)(.*)/", $item, $matches) == 1) { 
    unset($ar[$key]); 
    if (isset($ar[--$key])){ 
    $ar[$key] .= $matches[0]; 
    } 
} 
} 

結果:

var_dump($myAr); 

array(4) { 
    [0]=> string(28) "lenny/volatile/main Packages" 
    [1]=> string(28) "lenny/volatile/main Packages" 
    [2]=> string(43) "lenny/volatile/main Sources Reading package" 
    [4]=> string(27) "lenny/volatile/main Sources" 
} 
1

這將創建一個新的數組你想要的方式:

$target = array(array_shift($array)); 
$to = 0; 
foreach($array as $string) { 
    if($string[0] === ' ') { 
     $target[$to] .= $string; 
    } 
    else { 
     $target[] = $string; 
     $to++; 
    } 
} 

DEMO