数组中的字符串,引号或无引号

时间:2011-08-10 14:45:15

标签: php

当我将键值分配给类型字符串数组时,是否必须使用引号?

define('ALBUM_COVER_50', '../discography/artwork/cover/50/');
define('ALBUM_COVER_ZOOM', '../discography/artwork/cover/800/');

$selected_artwork = array();
$cover = 'greatesthits_cs23409.jpg';

$selected_artwork[ALBUM_COVER_50.$cover] = ALBUM_COVER_ZOOM.$cover;

在上面的代码段中,我是否必须将ALBUM_COVER_50.$cover放在引号中,如:

$selected_artwork['\''.ALBUM_COVER_50.$cover.'\''] = ALBUM_COVER_ZOOM.$cover;

解决此问题的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

不,如果使用变量或定义的常量作为数组键,则不需要引号。您应该将您使用的密钥视为字符串值本身。 PHP将处理它,因为它可以处理任何其他字符串值,这意味着您可以使用变量,双引号变量插值,串联或构建数组键所需的任何内容。

如果它提高了可读性,我会经常将所需的数组键存储到变量中。最近我需要这样做,因为数组键是3或4个字符串连接的结果,并且阅读起来很笨重。

// To improve readability
// instead of performing string operations inside the array key []
$selected_artwork[ALBUM_COVER_50.$cover] = ALBUM_COVER_ZOOM.$cover;

// becomes...
$k = ALBUM_COVER_50.$cover;
$selected_artwork[$k] = ALBUM_COVER_ZOOM.$cover;

答案 1 :(得分:1)

在这种情况下不需要引号。

如果将ALBUM_COVER_50放在引号中,它将不再是常量,并将成为包含值“ALBUM_COVER_50”的字符串。这不太可能产生您期望的结果。

$cover也是如此。这个变量已经包含一个字符串('greathits_cs23409.jpg')。如果将它放在单引号中,它将停止包含该值,并且只是一个值为'$ cover'的字符串。

如果您按照指示的方式使用单引号:

'\''.ALBUM_COVER_50.$cover.'\''

您将创建一个如下所示的数组键:

['\'../discography/artwork/cover/50/greatesthits_cs23409.jpg\'']

您可以删除引号。