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

在PHP关联数组索引中使用空格是一种不好的做法吗?,php,arrays,Php,Arrays,我必须使用关联数组传递一些参数,如下所示: $blockGroup['name=products type=complete'] 在做一些测试时,我发现它是有效的,但这是一种不好的做法吗?是否可能产生任何错误或意外行为 谢谢你的建议 编辑1 我在视图实现中使用此阵列,完整结构为: $blockGroup['name=products type=complete'][] = array( 'name' => 'GeForce', 'value' =

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

$blockGroup['name=products type=complete']
在做一些测试时,我发现它是有效的,但这是一种不好的做法吗?是否可能产生任何错误或意外行为

谢谢你的建议

编辑1

我在视图实现中使用此阵列,完整结构为:

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

它会起作用,是一种不错的做法。空格只是索引字符串中的常规字符。这没问题

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

file.txt

example.php


回答您最初的问题,PHP中的关联数组将键映射到值。在本例中,您使用的键是字符串,这是PHP在本例中关心的全部内容,而不一定是那些字符串的内容(即它们可能有空格,也可能没有空格)。我这样说是因为你似乎不确定这在语言中是否合法(而不仅仅是这是否是一种坏习惯)


至于这是否是坏习惯,我不知道。这取决于上下文,如果这种键自然地映射到您想要存储的值,那么它应该是好的。

我会说是的,这是一种不好的做法,但它将起作用。无论你想要实现什么,都可以用不同的方式来实现。我可以推荐一个多维数组吗?或者一个键和一个值

我想这样的事情可能会让你头疼。在我看来,拼写错误的空间更大,而且看起来也不太好看

请记住,我指的是你的例子。沿着这些思路做一些事情很好:

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

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

事实上,在很多情况下,将这些键用于关联数组将使代码可读并便于对其进行更改

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

我看到的是您试图使用数组键作为表达式,这是非常糟糕的做法。事情的目的是为了它们的目的。使用关联键作为关联键。

这是一种有效的语法,但它可能是一种更好的方法来实现您尝试执行的任何操作

数组可以有整数键、浮点键、Null键、Bool键和字符串键

对于字符串,PHP在内部将其表示为字节序列,因此据我所知,不可能通过使用空格或特殊字符作为密钥来引入漏洞

然而,在我看来,错误地键入一个键会降低代码的可读性,并且更容易出错,并且会花费无数的时间来找出您应该键入的内容

$myKey['name=吉他价格=200.00']

而不是:

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

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

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


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


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

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

关于最佳实践,可读性和实用性应该是主要关注点。如果数组键中的空格使代码可读,那么可以随意使用它们。这整篇文章可以用作数组键,但这并不实用

如果要创建变量,使用数组键作为变量名,我不建议使用空格-使用
extract()
也是如此。当使用不受您控制的数据(如用户输入)时,这可能会很危险,因此请小心

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

变量的来源:


extract()
的源代码:

您可以使用字符串作为数组键,所以不必了。这可能不是完成您正在做的任何事情的最佳方式,但它是有效的。您应该在代码复查StackExchange上提出最佳实践。虽然它仍处于测试阶段,但这个网站非常活跃,而且它明确地围绕着这个主题。你为什么要这么做呢?为什么不在
块组
中设置两个数组,一个用于
名称
,另一个用于
tpye
,然后创建一个实用函数来按字符串提取数据(自行解析)。@elclanrs,这在视图编码中使用。这个数组的完整结构是
$blockGroup['name=products type=complete'][]=array('name'=>'GeForce','value'=>'99.99')
我的观点是,可能有一种方法可以简化它。这看起来很难维护。我认为,如果有可能引入错误,并影响可读性,那么这是一个很好的指标,表明它是一个坏的practice@Jon我想你不明白这个问题。检查我的更新。你现在明白了吗?我不是说你的答案错了。我只是说,如果您以这种方式定义它们,然后访问它们(非动态),这将是丑陋的,并且会损害可读性。^^(我不是投票否决答案的人^^^)用你添加的例子,是的,它确实很好地解决了这个问题。OP只是从来没有说过它是如何定义的,所以我相信它是静态设置的,我想补充一点,是的,你是对的,但是如果你这样定义它们,它是丑陋的,并且会影响t
$scores = array("John Doe" => 100, "Ivan Ivanovich" => 75.3);

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