变量名称中的空格不能正常工作

www*_*.me 0 php arrays

我有阵列

[Company] => Demo Company 1
[First Name] => Test
[Last Name] => Lead 1
[Designation] => This is testing title 1
[Email] => email1@yopmail.com
[Phone] => 242377
Run Code Online (Sandbox Code Playgroud)

我使用了extract()函数,所以所有索引值都将成为变量名,我也使用{},因为变量名中有空格.但我不知道为什么它不起作用:(这$ {'First Name'}返回空白...下面是我的代码

foreach($vals as $value){
extract($value);
echo '<tr><td><a href="edit.php?id='.$LEADID.'">'.${'First Name'}.' '.${"Last Name"}.'</a></td><td>'.$Company.'</td><td>'.$Phone.'</td><td>'.$Email.'</td></tr>';
}
Run Code Online (Sandbox Code Playgroud)

Emi*_*röm 6

变量名称不能包含空格.供参考,请阅读变量手册:

有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线.作为正则表达式,它将表示为:'[a-zA-Z_\x7f-\xff] [a-zA-Z0-9_\x7f-\xff]*'

如果我是你,我只是在阵列上$value使用较短的名字,所以不要使用$v或类似.您还可以使用printf使代码更具可读性:

foreach($vals as $v) {
  printf('<tr><td><a href="edit.php?id=%d">%s %s</a></td><td>%s</td><td>%s</td><t\
d>%s</td></tr>',
         $LEADID,
         $v['First Name'],
         $v['Last Name'],
         $v['Company'],
         $v['Phone'],
         $v['Email']);
}
Run Code Online (Sandbox Code Playgroud)

  • 因为这个`extract`不会使变量带有无效的名字. (4认同)
  • 阿米特,这是一个没有文档记录的功能,所以它也可能是一个错误.依靠无证件行为永远不会好.我通常甚至在数组键中避免空格只是因为它可能会在将来咬我(空格不允许作为HTML中的元素名称,而不是MySQL列名,等等......) (2认同)
  • @AmitPatil:我建议即使你找到了一个使用带空格的变量名的技巧,这是非常糟糕的做法.显然它并没有在任何地方强制执行.如果您确实需要可视分隔符,请使用下划线字符. (2认同)