2011-08-10 62 views
1

当我将一个键值赋给一个字符串类型的数组时,它是否必须用引号引起来?数组中的字符串,引号或没有引号

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; 

什么是去了解这个问题的最佳做法是什么?

回答

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

这种情况下不需要引号。

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

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

如果您在您指定的方式使用单引号:

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

您将创建一个看起来像这样的数组键:

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

你可能只是下降的报价。

相关问题