2010-03-18 96 views
6

如何從關聯數組中獲取數組值?如何從關聯數組中獲取數組的值?

副陣列實施例:

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 
    [1] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 
    [2] => Array 
     (
      [0] => 7 
     ) 
) 

所需的輸出

Array 
(1,2,3,4,5,6,7) 

回答

8

不知道它會適合你,因爲它是PHP只> = 5.3,但這裏有一個可能的解決方案,使用array_walk_recursive和封蓋(見Anonymous functions

$array = array(
    array(1, 2, 3), 
    array(4, 5, 6), 
    array(7), 
); 

$result = array(); 
array_walk_recursive($array, function ($value, $key) use (& $result) { 
    $result[] = $value; 
}); 
var_dump($result); 

其結果是:

array 
    0 => int 1 
    1 => int 2 
    2 => int 3 
    3 => int 4 
    4 => int 5 
    5 => int 6 
    6 => int 7 

基本上,封閉是我得到這個窩窩的唯一方法rk:它用於通過引用將$result變量導入到匿名函數中。



而且,只是將它張貼,只有我得到這個對於PHP 5.2 工作(即不使用閉包)是這樣的:

$result = array(); 
array_walk_recursive($array, 'my_func', & $result); 
var_dump($result); 

function my_func($value, $key, & $result) { 
    $result[] = $value; 
} 

其中一期工程也提出警告:

Deprecated: Call-time pass-by-reference has been deprecated 

不幸的是,我沒有找到得到這個沒有在呼叫時通過引用傳遞$result :-(
工作的一種方式(也許別人有一個想法,如何做到這一點?)

+0

+1。雖然我有一個不使用閉包的答案,但這是我首先想到如何去做的。當PHP5.3變得更常見時,回答PHP問題會更有趣。 – Yacoby 2010-03-18 22:57:16

+0

@Yacoby:PHP 5.3 FTW! *(匿名函數和閉包是我真正希望能夠在工作中使用的一件事......但我們使用的是PHP 5。2 ;-()* – 2010-03-18 22:59:16

1

做一個array_merge()每個單獨部件上。

$test = Array 
(
    "0" => Array 
     (
      0 => 1, 
      1 => 2, 
      2 => 3, 
     ), 
    "1" => Array 
     (
      0 => 4, 
      1 => 5, 
      2 => 6, 
     ), 
    "2" => Array 
     (
      0 => 7, 
     ) 
); 

print_r(array_merge($test[0],$test[1],$test[2])); 
// Array ([0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7) 
1

下PHP 5.3這應該是非常好的和方便的,因爲通過使用array_reduce數組元素被解釋爲混合而不是固定爲整數

所以

print_r(array_reduce($test, 'array_merge')) 

我還沒有測試過 - 沒有5.3的副本 - 至少在理論應該這樣做。在<下5.3你會得到錯誤。

請注意,這僅合併數組的頂層,與使用array_walk_recursive的解決方案不同。

+1

+1,用於注意最近對array_reduce的更改。但是,您需要提供一個初始陣列。 array_reduce($ aNestedArray,'array_merge',array()) – goat 2010-03-19 03:42:13

1
$flattened = call_user_func_array('array_merge', $array);