【问题标题】:How to raname some specific key name in a multidimensional array如何重命名多维数组中的某些特定键名
【发布时间】:2017-05-09 09:31:40
【问题描述】:

那里

我有一个关于数组操作的问题。

我有一个这样的源数组

 array:6 [
  0 => array:13 [
    "id" => 1
    "name" => "companyName"
    "code" => "1"
    "orderNumber" => 1
    "enabled" => true
    "createSpace" => false
    "description" => "description"
    "lft" => 1
    "lvl" => 0
    "rgt" => 4
    "createdAt" => DateTime {#911
      +"date": "2017-05-04 01:51:22.000000"
      +"timezone_type": 3
      +"timezone": "Asia/Shanghai"
    }
    "updatedAt" => DateTime {#909
      +"date": "2017-05-04 01:51:22.000000"
      +"timezone_type": 3
      +"timezone": "Asia/Shanghai"
    }
    "children" => array:1 [
      0 => array:13 [
        "id" => 7
        "name" => "departmentName"
        "code" => "7"
        "orderNumber" => 7
        "enabled" => true
        "createSpace" => false
        "description" => null
        "lft" => 2
        "lvl" => 1
        "rgt" => 3
        "createdAt" => DateTime {#914
          +"date": "2017-05-09 05:36:55.000000"
          +"timezone_type": 3
          +"timezone": "Asia/Shanghai"
        }

现在我使用 array_map 函数将键名重命名为我的要求,“名称”到“文本”,

PHP 代码在这里

$trees = array_map(function($tree) {
                return array(
                    'id' => $tree['id'],
                    'text' => $tree['name'],
                    'children' => $tree['children']
                );
            }, $trees);

结果是

    array:6 [
      0 => array:3 [
        "id" => 1
        "text" => "departmentName"
        "children" => array:1 [
          0 => array:13 [
            "id" => 7
            "name" => "departmentName"
            "code" => "7"
            "orderNumber" => 7
            "enabled" => true
            "createSpace" => false
            "description" => null
            "lft" => 2
            "lvl" => 1
            "rgt" => 3
            "createdAt" => DateTime {#914
              +"date": "2017-05-09 05:36:55.000000"
              +"timezone_type": 3
              +"timezone": "Asia/Shanghai"
            }
            "updatedAt" => DateTime {#903
              +"date": "2017-05-09 05:36:55.000000"
              +"timezone_type": 3
              +"timezone": "Asia/Shanghai"
            }
            "children" => []
          ]
        ]
      ]
      1 => array:3 [
        "id" => 2
        "text" => "departmentName"
        "children" => []
      ]
      2 => array:3 [
        "id" => 3
        "text" => "departmentName"
        "children" => []
      ]
      3 => array:3 [
        "id" => 4
        "text" => "departmentName"
        "children" => []
      ]
      4 => array:3 [
        "id" => 5
        "text" => "departmentName"
        "children" => []
      ]
      5 => array:3 [
        "id" => 6
        "text" => "departmentName"
        "children" => []
      ]
]

如您所见,它在“children”键中的子数组中不起作用,我怎么能用未知的多维数组更改它。谢谢。

【问题讨论】:

  • 展示你的 PHP。听起来你需要array_walk_recursive
  • @Tony Gao 将您的数组格式化为适当的 php 数组
  • 您可以使用 foreach() 并应用密钥检查条件然后覆盖密钥
  • @Utkanos 是的,也许你是对的,但我找不到 array_walk_recursive 的解决方案,并更新了 php 代码。

标签: php arrays multidimensional-array key


【解决方案1】:

将新的键值对添加到您的数组中,然后删除旧的对。参考 here

$arr[$newkey] = $arr[$oldkey];
unset($arr[$oldkey]);

【讨论】:

  • 感谢您的回复,但我的问题的重点是如何递归地进行重命名。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2014-03-23
  • 2015-06-09
  • 1970-01-01
  • 2020-10-10
  • 2020-10-13
  • 2011-05-26
相关资源
最近更新 更多