【问题标题】:How to remove spaces in array keys names in php?如何在php中删除数组键名中的空格?
【发布时间】:2014-01-01 00:53:10
【问题描述】:

我正在尝试删除数组键名称中的所有空格,即 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)?

有什么建议吗? :)

【问题讨论】:

    标签: php arrays loops multidimensional-array foreach


    【解决方案1】:

    您可以将数组传递给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"
    }
    

    示例: https://glot.io/snippets/ejej1chzg3

    【讨论】:

    • 什么意思?您想排除删除自定义键上的空格,但在所有其他键上替换它们?
    • 是的,你在写。只排除一些我们想在特殊条件下排除的特定键名。
    • @LimSocheat 先取消设置?
    【解决方案2】:

    这会有所帮助:

    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]); } }
    • 我的意思是所有这些 [",",".","-","+"] 都可以正常工作并且正在被替换,它只是特殊字符(外来字符)不起作用..你知道为什么吗?
    【解决方案3】:
    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');
    

    你去 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 2018-06-29
      • 2017-06-16
      • 2012-06-17
      • 2017-07-06
      • 2023-03-08
      相关资源
      最近更新 更多