2015-11-07 176 views
0

考慮以下數組:PHP:轉換多維數組

Array 
(
    [entity] => Array 
    (
     [title] => Array 
     (
      [empty] => error message 
     ) 
     [link] => Array 
     (
      [empty] => error message 
     ) 
     [authors] => Array 
     (
      [0] => Array 
      (
       [full_name] => Array 
       (
        [max_lengh] => another error message 2 
       ) 
      ) 
     ) 
    ) 
) 

如何將其轉換成類似形式:

$array = [ 
'entity[title]' => 'error message', 
'entity[link]' => 'error message', 
'entity[authors][0][full_name]' => 'another error message 2', 
]; 

我認爲這是通過遞歸方法來實現,或者使用引用,但兩件事我不好) 提前感謝你!

+0

你可以使用'的foreach()' – aldrin27

+1

也許嘗試一些東西,你可能會驚訝自己,但是如果你遇到問題,你可以問* *的具體問題,並分享你試過的代碼,這更有可能得到答案。 – blm

回答

0

也許沒有正確解釋任務。 感謝所有。

function format(array $array, $withLastKey = false) { 
     $iterator = new RecursiveIteratorIterator(
      new RecursiveArrayIterator($array)); 
     $returnArray = []; 
     foreach ($iterator as $key => $value) { 
      $keys = []; 
      for ($i = $iterator->getDepth(); $i >= 0; $i--) { 
       $childKey = $iterator->getSubIterator($i)->key(); 
       // if first element then without bracket 
       $keys[] = ($i == 0) ? $childKey : '[' . $childKey . ']'; 
      } 
      $keys = array_reverse($keys); 
      ($withLastKey) ?: array_pop($keys); 
      $returnArray[implode('', $keys)] = $value; 
     } 
     return $returnArray; 
    } 
0

你完全混淆了數組語法。沒有理由想要這樣的數組。僅指出[空]變爲[0],您可以嘗試var_export以更好地顯示它。

這是幹什麼用的?

$array = [ 
'entity[title]' => 'error message', 
'entity[link]' => 'error message', 
'entity[authors][0][full_name]' => 'another error message 2', 
]; 

甚至是什麼......?你在引號內有[]。我的意思是,你可以這樣做很容易

$array2['title'] = $array['title'][0]; 

另一件事來解決,你爲什麼會這樣擺在首位?

無論如何,它應該像這樣工作。

foreach ($array as $key => $value) 
{ 
    if (isset($value[0]) && !is_array($value[0])) 
    { 
     $array[$key] = $value[0]; 
    } 
}