如何在PHP中删除数组键名中的空格?

3

我想要将数组键名中的所有空格删除,例如使用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);,你可以清楚地看到空格被删除了,但最终结果仍然带有空格。

整个循环如下所示:

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]);


        }
    }
    }
}

以下是整个数组的外观:

如何在php中使用我选择的键和值将数组前置到另一个数组的每个元素?

有什么建议吗? :)

3个回答

9

这将有所帮助:

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
)

嘿,你知道如何删除所有特殊字符,比如“á”,“ü”等吗?如果我像这样添加它们,它就不起作用 :((( => function fixArrayKey(&$arr) { $arr=array_combine(array_map(function($str){return str_replace(array(" ",",",".","-","+","á","я", "Я"),"",$str);},array_keys($arr)),array_values($arr)); foreach($arr as $key=>$val) { if(is_array($val)) fixArrayKey($arr[$key]); } } - codepreneur
我是说所有这些 [",",",",".","-","+"] 都可以正常工作并被替换,只是特殊字符(外文)无法工作... 你知道为什么吗? - codepreneur
请看这里,希望能帮到您:https://dev59.com/HlLTa4cB1Zd3GeqPa4HI - sergio
它可以与各种类型的数组一起使用,非常好。 - Amir Khan

6
您可以将一个数组传递给str_replace,这样做会更加简洁和易于理解:
$my_array = array( 'one 1' => '1', 'two 2' => '2' );
$keys = str_replace( ' ', '', array_keys( $my_array ) );
$results = array_combine( $keys, array_values( $my_array ) );

结果:

array(2) {
  ["one1"]=>
  string(1) "1"
  ["two2"]=>
  string(1) "2"
}

Example: https://glot.io/snippets/ejej1chzg3


你的意思是什么?你想在自定义键上排除去除空格,但在其他所有键上替换它们? - sMyles
是的,你说得对。只需在特定条件下排除我们想要排除的某些特定关键字即可。 - Lim Socheat
@LimSocheat 取消设置 first? - insign

1
function array_stripstuff(&$elem)
{
  if (is_array($elem)) {
    foreach ($elem as $key=>$value)
      $elem[str_replace(" ","-",$key)]=$value;
  }
  return $elem;
}

$strippedarray = array_walk_recursive($yourarray,'array_stripstuff');

就是这样 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接