2010-11-05 115 views
0

此問題中的N表示任意大小的任意數字,並不一定(但可以)相同。我有一個具有N個鍵=>值對的數組。這些鍵=>值對還可以包含另一個大小爲N的數組,其中N個鍵=>值對。這個數組可以有N個深度,這意味着數組中的任何key =>值對都可以映射到另一個數組。如何獲得該數組的所有值(將它們存儲在一個新的1維數組中),忽略鍵鍵=>值對?遍歷數組數組的所有值

回答

2

array-walk-recursive

搶在yurkowski點網 10月26日 - 2010 06:16

如果你真的不特別 關心數組的鍵,你可以 捕獲所有值非常簡單:

$sample = array(
    'dog' => 'woof', 
    'cat' => array(
     'angry' => 'hiss', 
     'happy' => 'purr' 
    ), 
    'aardvark' => 'kssksskss' 
); 

$output = array(); 

// Push all $val onto $output. 
array_walk_recursive($sample, create_function('$val, $key, $obj', 'array_push($obj, $val);'), &$output); 
// Printing echo nl2br(print_r($output, true)); 

/* 
* Array 
* (
* [0] => woof 
* [1] => hiss 
* [2] => purr 
* [3] => kssksskss 
*) 
*/ 
+0

雖然這似乎是最好的答案,我唯一的疑慮是,這個功能只能由PHP> = 5.3的支持。但是,這仍然是最好的辦法。 – bmarti44 2010-11-05 14:50:33

+0

編輯到我以前的評論,內聯PHP和函數只支持PHP> = 5.3。如果此函數僅使用對函數的引用,則它將在較早版本的PHP中起作用。 – bmarti44 2010-11-05 15:42:00

1

你可以做SMT是這樣的:

$output = array(); 

function genArray($arr) { 
    global $output; 
    foreach($arr as $key => $val) { 
     if(is_array($val)) 
      genArray($val); 
     else 
      output[$key] = $val; 
    } 
} 

genArray($myArray); 

相反遞歸的,使用全局變量和函數,它可以通過循環來完成,但是這只是一個一般的想法,大概需要一點點你的注意,反正。這應該是件好事:)

+1

使用舊版本的PHP,這是最好的解決方案。我會刪除全局變量,只是在函數中返回它。 – bmarti44 2010-11-05 14:52:30

+0

@ bmarti44:返回一個數組?或數組元素? – hummingBird 2010-11-05 15:00:29

+0

啊,我看你在這種情況下不能退貨。這將返回一個數組元素,你是正確的。 – bmarti44 2010-11-05 15:16:46