在多维数组中用下划线替换数组键空间 - php

我有一个数组,所有键都带有空格。这会给无法定位空格的其他程序中的定位带来问题,并且在键中包含空格是一种不好的做法。

我正在寻找将删除键空间并替换为多维数组中的下划线的东西。最有可能必须是递归函数吗?

在另一个问题中发现了类似的问题,但与替换价值有关。

foreach ($all_regions as $key => $value){
 $all_regions[$key] = strtolower(str_replace(' ', '_', $value));
}

非常需要此复制,但需要密钥。
我遇到的问题是,我可以考虑如何引用键本身,因为如果您尝试像上述方法一样进行推入操作,它将仅使用下划线重新创建另一个键。

数组的一个片段,它的深度是最深的。

Array
(
    [0] => Array
        (
            [Line Identifier] => PID
            [Set ID] => 1
            [User ID] => 
            [Requests] => Array
                (
                    [0] => Array
                        (
                            [Line Identifier] => OBR
                            [Set ID] => 1
                            [Placer Order Number] => 021120091525
                            [Results] => Array
                                (
                                    [0] => Array
                                        (
                                            [Line Identifier] => OBX
                                            [Set ID] => 1
                                    [1] => Array
                                        (
                                            [Line Identifier] => OBX
                                            [Set ID] => 2

我已经尝试了以下方法,但是Key element cannot be a reference

private function fixArrayKeys($array){
    if(is_array($array)){
        foreach($array as &$key => $value){
            if(!is_array($key))
                $array[strtolower(str_replace(' ', '_', $key))] = $value;
            else
                fixArrayKeys($array);
        }
    } else {
        return $array;
    }
}

参考方案

function fixArrayKey(&$arr)
{
    $arr=array_combine(array_map(function($str){return str_replace(" ","_",$str);},array_keys($arr)),array_values($arr));
    foreach($arr as $key=>$val)
    {
        if(is_array($val)) fixArrayKey($arr[$key]);
    }
}

测试如下:

$data=array("key 1"=>"abc","key 2"=>array("sub 1"=>"abc","sub 2"=>"def"),"key 3"=>"ghi");
print_r($data);
fixArrayKey($data);
print_r($data);

输出:

Array
(
    [key 1] => abc
    [key 2] => Array
        (
            [sub 1] => abc
            [sub 2] => def
        )

    [key 3] => ghi
)
Array
(
    [key_1] => abc
    [key_2] => Array
        (
            [sub_1] => abc
            [sub_2] => def
        )

    [key_3] => ghi
)

PHP array_intersect_key但保留array2的值 - php

我有2个数组:$array1 = ["b" => "no", "c" => "no", "d" => ["y" => "no"]]; $array2 = ["a" => …

PHP:为什么将日期设置为数组? - php

为什么将此字符串组成一个数组,如何停止它?摘要:(获取日期)public function setDate(){ $this->date = date("Y-m-d"); return $date; } public function getDate(){ return $this->date; } $date = getDa…

php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php

最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

array_udiff返回不同的结果 - php

我有这段代码来获取两个对象数组之间的区别:$diff = array_udiff($a, $b, function($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); $ a是[ { "id": "7", "attribute":…