[英]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.