2012-05-15 41 views
4

array_chunk使用塊大小將數組分割成多個數組以進行切割。如果我有一個數組數組,我只想要一個大數組值?array_chunk的對面

我可以使用array_merge,但這需要我枚舉所有的子數組,其中可能有一個可變數字。

現在,我的解決辦法是:

foreach($input as $tmp) {foreach($tmp as $val) { 
    ... 
}} 

但是,這是一種混亂和只適用,因爲我想使用的值。如果我想將數組存儲在某個地方怎麼辦?

編輯:輸入來自一組<select multiple>框,用於從多個類別中選擇項目。每個項目都有一個全球唯一的(項目之間)ID,所以我只想將輸入組合到一個數組中並貫穿其中。

輸入可能類似於:

[[4,39,110],[9,54,854,3312,66950],[3]] 

預期輸出:

[4,39,110,9,54,854,3312,66950,3] 

或:

[3,4,9,29,54,110,854,3312,66950] 
+0

你會'json_encode' :) –

+1

你能給一個輸入和期望輸出的具體例子嗎? – deceze

+0

@MihaiIorga我只是'json_decode'd它雖然;)我會用一個例子編輯。 –

回答

4

從PHP文件取消了對array_values

/** 
* Flattens an array, or returns FALSE on fail. 
*/ 
function array_flatten($array) { 
    if (!is_array($array)) { 
    return FALSE; 
    } 
    $result = array(); 
    foreach ($array as $key => $value) { 
    if (is_array($value)) { 
     $result = array_merge($result, array_flatten($value)); 
    } 
    else { 
     $result[$key] = $value; 
    } 
    } 
    return $result; 
} 

PHP有沒有本地的方法扁化數組..所以你去。

+0

嗯...很好的答案,但我想我的效率明智會更好,只要保持我正在做的,至少現在。 –

+0

他的答案和你的答案一樣有效,只是多一點文字,它可以做多層次的數組。但是請注意,它會覆蓋重複的鍵(請參閱http://codepad.org/JPaFgYRt) – Zombaya

+0

效率很高,但是如果我必須循環處理結果來處理,則不值得。這回答了這個問題,因爲它是摺疊數組的好方法,但是如果它正在被使用,那就只是開銷。 –

2

對不起,如果我錯了,但如果我們將在多個選擇組中同名,那麼它會產生一個預期的數組。

<?php 
echo '<pre>'; 
print_r($_POST['cat']); 
?> 
<form method="post"> 
<select name="cat[]" multiple="multiple"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
</select> 

<select name="cat[]" multiple="multiple"> 
<option value="22">2</option> 
<option value="33">3</option> 
</select> 

<select name="cat[]" multiple="multiple"> 
<option value="111">111</option> 
<option value="222">222</option> 
<option value="333">333</option> 
<option value="444">444</option> 
</select> 
<input name="" type="submit" /> 
</form> 

輸出:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
    [4] => 22 
    [5] => 33 
    [6] => 222 
) 
3

雖然PHP沒有內置的方法扁平化陣列,可以實現使用array_reducearray_merge同樣的事情。像這樣:

$newArray = array_reduce($array, function ($carry, $item) { 
    return array_merge($carry, $item); 
}, []); 

這應該與array_chunk相反。

+0

這是我使用的,它更簡單,更簡潔。這應該是選定的答案。 +1 –