2015-11-07 108 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]; 
    } 
}