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:如何将点符号键分隔成带有键前缀的数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP学习四--数组

php基础-数组

php函数 -extract

为啥关键字参数必须作为带有符号键的哈希传递,而不是 Ruby 中的字符串键?

如何在 JavaScript 文字符号中创建关联数组

excel 数据-分列 中分割符号中的 tab键默认情况下是选中,我想问一下tab键有啥作用?