2011-11-08 73 views
-2

只是好奇,如果有人知道如何每隔一個子陣列合併,PHP合併每個其它陣列

又名

$tmp = array(); 

$tmp[0] = array(false); 
$tmp[1] = array(false); 

$tmp[2] = array(false); 
$tmp[3] = array(false); 

$tmp[4] = array(false); 
$tmp[5] = array(false); 

或.... 0 + 1 2 + 3 4 + 5

這樣的事情我想?

$i=0; $new=array(); 
foreach($tmp as $k=>$v) { 
    $tmp[$k] = $v; 
    if($i=$k-1) { 
    $new[] = $tmp[$i] + $tmp[$i-1]; /* or something ridiculous like that */ 
    } 
    $i++; 
} 
+0

究竟是編輯這個AND的點,特別是在它被解決和接受之後。可笑...... – ehime

回答

1

使用array_chunkarray_merge你能拿出一個相當簡單的解決方案

<?php 

$result = array_chunk($tmp, 2); 

foreach ($result as &$chunk) 
{ 
    $chunk = array_merge($chunk[0], $chunk[1]); 
} 
+1

如果塊有兩個以上的元素,'call_user_func_array('array_merge',$ chunk)'也可以。 –

+0

哦!更好。感謝您的意見。 – adlawson

+1

雖然這看起來很棘手和「很好」 - 我永遠不會在生產中寫這樣不明顯的代碼(是的,對我來說它看起來有點難以閱讀和理解) – zerkms

0

這假設數組包含偶數個條目。如果不是這種情況,或者如果你正在尋找合併0 + 1,1 + 2,2 + 3,更改$i增量爲1,和$j分配改爲$j = count($tmp) - 1

$tmp = array(); 

$tmp[0] = array(false); 
$tmp[1] = array(false); 

$tmp[2] = array(true); 
$tmp[3] = array(true); 

$new = array(); 
for($i = 0, $j = count($tmp); $i < $j; $i += 2) 
{ 
    $new[] = array_merge($tmp[$i], $tmp[$i+1]); 
} 

輸出

array(2) { 
    [0]=> 
    array(2) { 
    [0]=> 
    bool(false) 
    [1]=> 
    bool(false) 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    bool(true) 
    [1]=> 
    bool(true) 
    } 
} 
+0

你也可以寫[array_walk](http://php.net/manual/en/function.array-walk.php)。 – ssamuel

2
$new = array(); 
for ($i = 0, $cnt = count($tmp); $i < $cnt; $i += 2) { 
    $new[] = $tmp[$i] + $tmp[$i + 1]; 
} 
+0

具有奇數個條目的數組會導致此失敗,並顯示「Notice:Undefined offset:」和「致命錯誤:不支持的操作數類型」,如下所述。 – nickb

+0

@nickb:確實,但我沒有一個目標去做愛媛的全部工作,但給了他一個如何寫基地的想法。順便說一句,當$ tmp [$ i]不是數組,而是一個對象時,它會失敗,我不處理它,因爲它超出了問題範圍。 – zerkms

+0

總是有一個偶數,在這種情況下,您可以始終使用字符串鑄造$ mp =(array)$ tmp;所以它是一個非問題。 – ehime