php - 如何在php中删除数组键名称中的空格?

标签 php arrays loops multidimensional-array foreach

我正在尝试删除数组键名称中的所有空格,即str_replace('','',$ value)(或者最糟糕的转换方案用下划线(_)替换它们)

并且我正在尝试在我的多维数组的最深层次(如下所示)进行此操作(因为其他图层/层次没有空格(谢谢上帝!))

[...]

[ownPagestoriesbystorytype] => Array
                        (
                            [type] => pagestoriesbystorytype
                            [object_id] => 12365478954
                            [metric] => page_stories_by_story_type
                            [end_time] => 1386057600
                            [period] => 86400
                            [ownValues] => Array
                                (
                                    [type] => pagestoriesbystorytypemetrics
                                    [fan] => 1913
                                    [page post] => 153
                                    [user post] => 24
                                )

                        )

                    [ownPagestorytellersbystorytype] => Array
                        (
                            [type] => pagestorytellersbystorytype
                            [object_id] => 12365478954
                            [metric] => page_storytellers_by_story_type
                            [end_time] => 1386057600
                            [period] => 86400
                            [ownValues] => Array
                                (
                                    [type] => pagestorytellersbystorytypemetrics
                                    [fan] => 1902
                                    [page post] => 137
                                    [user post] => 9
                                )

                        )

[...]


到目前为止,我的尝试是徒劳的:

[...]
if (is_array($value))
        {

            $keys = str_replace(' ','',array_keys($value));
            $values = array_values($value);
            $value = array_combine($keys,$values);
        }
[...]


[...]

foreach ($value as $k => $v)
            {
                $b = str_replace(' ','',$k);
                $value[$b] = $value[$k];
                unset ($value[$k]);

            }

[...]


上面的代码不起作用,但是如果我把print_r($ value);在循环的最后,您可以清楚地看到空格已被删除,只是最终结果以空格结尾(STILL)。

整个循环如下所示:

for ($i=0;$i<count($results);$i++)
{

    for ($j=0;$j<count($results[$i]);$j++)
    {
    foreach($results[$i][$j] as $key => $value)
    {
        $typee = ['type' => strtolower(str_replace('_','',$results[$i][$j]['metric']))];
        array_insert($results[$i][$j],$typee,0);
        if (is_array($value))
        {

            $keys = str_replace(' ','',array_keys($value));
            $values = array_values($value);
            $value = array_combine($keys,$values);

            $type = ['type' => strtolower(str_replace('_','',$results[$i][$j]['metric']))."metrics"];
            array_insert($results[$i][$j]['value'],$type,0);
            $results[$i][$j]['ownValues'] = $results[$i][$j][$key];
            unset($results[$i][$j][$key]);


        }
    }
    }
}


您可以在此处看到整个数组的外观:

How to prepend array to each element of another array with my choice of key and value (in php)?

有什么建议? :)

最佳答案

这将有助于:

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 - 如何在php中删除数组键名称中的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563369/

相关文章:

php - 如何将 JWT 添加到授权 header ?

php - 从 MySQL 数据库检索时的日期更改

arrays - 在 go 中循环 slice/数组的有效方法

PHP array_intersect_key 但保留 array2 中的值

c - 打印出用户选择的两个不同年份之间的天数的程序有困难

php - 使用 php 和 html 限制第二个下拉列表选项

PHP多数据库连接

Javascript - 原始值的类型是对象?

c - 我的游戏板无限循环

django - Django 模板中的嵌套循环