繁体   English   中英

PHP:转换多维数组

[英]PHP: Convert a multidimensional array

给定以下数组:

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',
];

我认为这是通过递归完成的,或者使用了引用,但这两项我都不是很好。)预先感谢您!

您对数组语法完全感到困惑。 您没有理由想要这样的数组。 唯一需要说明的是[empty]变为[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];
   }
}

可能没有正确解释任务。 谢谢大家。

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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM