1

我想崩潰多維數組,這樣PHP多維數組鍵崩潰

$arr = array(
    'first' => array(
     'second' => array(
      0 => 'foo', 
      1 => 'bar' 
     ) 
    ) 
); 

會崩潰到

$arr = array(
    'first[second][0]' => 'foo', 
    'first[second][1]' => 'bar' 
); 

我試圖做的是恢復multipart/form-data$_POST陣列到原始請求正文,如下所示:

------WebKitFormBoundaryxiOccKlMg4Al6VbH 
Content-Disposition: form-data; name="first[second][0]" 

foo 
------WebKitFormBoundaryxiOccKlMg4Al6VbH 
Content-Disposition: form-data; name="first[second][1]" 

bar 
------WebKitFormBoundaryxiOccKlMg4Al6VbH-- 
+0

擴展例子,通過這個例子你的問題是模糊的!同時把你的作品和你迄今爲止所做的事情放在一起。 – SAVAFA

+0

你試過了什麼? –

+0

[可能的重複](http://stackoverflow.com/questions/526556/how-to-flatten-a-multi-dimensional-array-to-simple-one-in-php) –

回答

0

試試此代碼:

$arr = array(
    'first' => array(
     'second' => array(
      0 => 'foo', 
      1 => 'bar' 
     ) 
    ) 
); 
$result = array(); 
function processLevel(&$result, $source, $previous_key = null) { 
    foreach ($source as $k => $value) { 
     $key = $previous_key ? "{$previous_key}[{$k}]" : $k; 
     if (!is_array($value)) { 
      $result[$key] = $value; 
     } else { 
      processLevel($result, $value, $key); 
     } 
    } 
} 
processLevel($result, $arr); 
var_dump($result); 
die(); 

它輸出:

array(2) { 
    ["first[second][0]"] => string(3) "foo" 
    ["first[second][1]"] => string(3) "bar" 

} 
+0

請使用更多的自我解釋變量名稱,以便我們可以更容易地知道發生了什麼;-) – bwoebi

+0

我試圖儘快寫出它,作爲第一個發佈答案的人) –

+0

然後現在就改變它,不禁止編輯...(和是的,你是第一個,我的答案是6-7秒後^^) – bwoebi

0
function collapseArray ($array, $tree = array(), $step = 0) { 
    $result = array(); 
    foreach ($array as $key => $val) { 
     $tree[$step] = $key; 
     if (is_scalar($val)) { 
      $first = array_shift($tree); 
      $result["{$first}[".implode("][", $tree)."]"] = $val; 
      array_unshift($tree, $first); 
     } else { 
      $result += collapseArray($val, $tree, $step + 1); 
     } 
    } 
    return $result; 
} 

$arr = array(
    'first' => array(
     'second' => array(
      0 => 'foo', 
      1 => 'bar' 
     ) 
    ) 
); 

$newArray = collapseArray($arr); 

輸出時的var_dump()'ED:

array(2) { 
    ["first[second][0]"]=> 
    string(3) "foo" 
    ["first[second][1]"]=> 
    string(3) "bar" 
} 
0

這個是什麼?

$arr = array(
    'first' => array(
     'second' => array(
      0 => 'foo', 
      1 => 'bar' 
     ) 
    ) 
); 
$newArray=array(); 
foreach($arr['first']['second'] as $k=>$v) 
{ 
    $newArray['first[second]['.$k.']']=$v; 
} 

var_dump($arr); 
var_dump($newArray); 

我希望這會有所幫助。

+0

不是通用解決方案 –

+0

@BogdanBurim:有關通用解決方案的任何說法? –

+0

很明顯,它應該是普遍的,也很明顯,他提供的數組是樣本。 –