在PHP关联数组索引中使用空格是不好的做法吗?

时间:2013-04-24 02:02:55

标签: php arrays

我必须使用关联数组传递一些参数,如下所示:

$blockGroup['name=products type=complete']

做一些测试我发现它有效,但这是一种不好的做法吗?是否有可能产生任何错误或意外行为?

感谢您的任何建议!

编辑1

我在视图实现中使用此数组,完整的结构是:

$blockGroup['name=products type=complete'][] =
    array(
        'name' => 'GeForce',
        'value' => '99.99'
    );

7 个答案:

答案 0 :(得分:10)

不,不是。编程中的空间符号并没有特别的意义。用引号括起来从而形成一个字符串的符号可以用作关联数组键。

事实上,很多时候使用关联数组的这些键会使你的代码可读并且方便对它进行更改。

$scores = array("John Doe" => 100, "Ivan Ivanovich" => 75.3);

我看到你试图使用数组键作为表达式,这实际上是不好的做法。事情意味着它们的意义。使用关联键作为关联键。

答案 1 :(得分:3)

它会起作用并且不差练习。空格只是索引字符串中的常规字符。没问题。

在许多编程情况下,您在数组中使用的索引是动态创建的,这是必要的。索引可以是偶数二进制字符串。查看此示例,典型情况。我们想从文件中删除重复的行,并且只打印每行一次:

file.txt的

hello world. 
foo bar
hello world
123

使用example.php

$printed = array(); 
foreach(file('file.txt') as $line) {
    if(isset($printed[$line])) {
        continue; // skip the line
    }

    echo $line;
    $printed[$line] = true; // line will contain spaces
}

答案 2 :(得分:1)

回答您的原始问题,PHP中的关联数组将键映射到值。在这种情况下,您使用的键是字符串,在这种情况下,所有PHP都关心,不一定是这些字符串的内容(即它们可能有也可能没有空格)。我之所以这样说,是因为你似乎不确定它是否合法(而不仅仅是不好的做法)。

至于这是不好的做法,这不是我所知道的。这取决于上下文,如果那种键自然地映射到你想要存储的值那么它应该没问题。

答案 3 :(得分:1)

我会说是的,这是不好的做法,但工作。无论你想要实现什么,都可以采用不同的方式。我可以建议一个多维数组吗?或者是关键和价值?

我想这样的事情可能会导致头痛。更多拼写错误的空间IMO。再加上它看起来不是很好。

请记住,我特别指的是你的例子。这些方面的东西很好:

array('toaster oven' => 100, 'heater' => 50);

答案 4 :(得分:1)

这是有效的语法,但它可能是一种更好的方式来实现你想要做的任何事情。

数组可以包含Integer,FLoating,Null,Bool和String键。

在字符串的情况下,PHP在内部将它们表示为一个字节序列,因此据我所知,没有机会通过为键使用空格或特殊字符来引入漏洞。

然而,在我看来,它会使代码不太可读,并且因错误输入密钥而更容易出错,并花费无数个小时来找出你应该键入的内容

$myKey['name=guitar price=200.00']

而不是:

$myKey['name=gutiar price=200.00']

PHP手册页详细解释了为什么这是一种不好的做法:

  

在将来的某个时刻,PHP团队可能希望添加另一个常量或关键字,或者其他代码中的常量可能会干扰。例如,以这种方式使用单词empty和default是错误的,因为它们是保留关键字。

http://php.net/manual/en/language.types.array.php

答案 5 :(得分:1)

我不认为空格是键中的问题,但我认为使用等号似乎很尴尬。根据您的代码示例,我不明白为什么您不会像这样在数组上使用3维:


$blockGroup['products']['complete'][] =
    array(
        'name' => 'GeForce',
        'value' => '99.99'
    );

我可能误解了你的情况,但这对我来说似乎更合乎逻辑。

答案 6 :(得分:1)

关于最佳实践,可读性和实用性应该是主要关注点。如果数组键中的空格使代码可读,则可以随意使用它们。整个帖子都可以用作数组键,但这不切实际。

如果要使用数组键作为变量名来创建变量变量,我不建议使用空格-使用extract()也是一样。当您无法控制的数据(例如用户输入)一起使用时,这可能很危险。

如果要创建变量变量,仍可以使用空格,只需将空格预先转换为下划线即可。

变量变量的来源:https://www.php.net/manual/en/language.variables.variable.php

extract()的来源:https://www.php.net/manual/en/function.extract.php