PHP:如何将点符号键分隔成带有键前缀的数组
Posted
技术标签:
【中文标题】PHP:如何将点符号键分隔成带有键前缀的数组【英文标题】:PHP: How to separate dot notation keys into array with key prefix 【发布时间】:2017-10-13 21:32:45 【问题描述】:你好我想转换这种类型的数组
[
"Continent.0.name" => "Europe",
"Continent.0.value" => 25,
"Continent.1.name" => "Asia",
"Continent.1.value" => 4.17,
"Total" => 190
]
进入
[
'continent' => [
'Europe' => 25
'Asia' => 4.17
],
'Total => 190
]
点后的'name'应该作为键,点后的'value'应该作为值。
有什么想法吗?
【问题讨论】:
到目前为止你尝试过什么? Using a string path to set nested array data的可能重复 trincot 不一样 【参考方案1】:试试这个
编辑:
<?php
$arr = [
"Continent.0.name" => "Europe",
"Continent.0.value" => 25,
"Continent.1.name" => "Asia",
"Continent.1.value" => 4.17,
"Total" => 190
];
$return = array();
$continentIndex = array();
foreach ($arr as $key => $currCell)
$name = explode('.', $key);
if(isset($name[2]) && $name[2] === 'name')
$return[$name[0]][$currCell] = array();
$continentIndex[$name[1]] = $currCell;
else if(isset($name[2]) && $name[2] === 'value')
$return[$name[0]][$continentIndex[$name[1]]] = $currCell;
if(!isset($name[1]))
$return[$key] = $currCell;
var_dump($return);
?>
返回
array (size=2)
'Continent' =>
array (size=2)
'Europe' => int 25
'Asia' => float 4.17
'Total' => int 190
【讨论】:
但我不希望大陆数组中的名称和值。再次阅读我的问题。以上是关于PHP:如何将点符号键分隔成带有键前缀的数组的主要内容,如果未能解决你的问题,请参考以下文章