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

标签 php arrays multidimensional-array

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

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

在另一个问题中发现了类似的东西,但是是关于替换值的。

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

除了 key ,几乎需要复制它。 我遇到的问题是我可以想到如何引用 key 本身,因为如果您尝试像上面的方法一样推送,它只会重新创建另一个带下划线的 key 。

数组的一个片段,这已经很深了。

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

我试过下面的方法,但是关键元素不能是引用

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 - 用多维数组中的下划线替换数组键空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391869/

相关文章:

javascript - PHP循环与1显示和隐藏在div功能

javascript - 使用javascript仅在数组中合并附近的重复值

php - 如何在php中用值填充多维数组

php - 使用 php 调整图像大小

javascript - AJAX 提交和 500 服务器错误

php - 如何使 CSV 上传执行得更快?

C: 将数组传递给函数 'on the fly'

ruby-on-rails - 使用 Ruby 按两个条件对哈希数组进行分组

c++ - 如何在 C++ 中按列对多维数组进行排序?

固定大小的 Javascript 多维数组