7

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

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

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

感谢您的任何建议!

编辑 1

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

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

7 回答 7

13

不,这不对。编程中的空格符号并没有真正的特殊含义。用引号括起来并因此形成字符串的符号可以用作关联数组键。

事实上,很多时候将这些键用于关联数组会使您的代码可读且便于对其进行更改。

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

我看到的是你试图使用数组键作为表达式,这真的是不好的做法。事物的意义在于它们的意义。使用关联键作为关联键。

于 2013-04-24T02:09:37.020 回答
3

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

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

文件.txt

hello world. 
foo bar
hello world
123

例子.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
}
于 2013-04-24T02:07:27.783 回答
2

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


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

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

于 2013-04-24T02:29:41.327 回答
1

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

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

于 2013-04-24T02:07:40.070 回答
1

我会说是的,这是不好的做法,但它起作用。无论你想达到什么目的,都可以用不同的方式来完成。我可以建议一个多维数组吗?或者也许是一个键和一个值?

我想这样的事情可能会在路上引起头痛。IMO 拼写错误的空间更大。再加上它不是很好看。

请记住,我专门指的是您的示例。这些方面的东西很好:

array('toaster oven' => 100, 'heater' => 50);
于 2013-04-24T02:09:05.670 回答
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

于 2013-04-24T02:09:40.897 回答
1

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

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

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

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

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

于 2020-06-10T16:31:50.837 回答