我正在使用提取方法,我发现它不会对负指数起作用。
我们以此代码段为例:
<?php
$arr = [0 => 'faa', 1 => 'fee', -2 => 'foo'];
$result = extract($arr, EXTR_PREFIX_INVALID, 'var');
echo $var_-2; // Absolutely wrong
?>
所以我试着这样做:
echo ${'var_-2'} // Notice: Undefined variable: var_-2
然后自提取文件here
返回成功导入符号表的变量数
我这样做了:
echo $result; // 2
首先,摘要似乎没有将-2
导入到符号表中。
因为文档没有说明这种行为,究竟是什么原因?
答案 0 :(得分:1)
因为根据php variable naming conventions,-
不是有效符号。
以下引用无耻地从文档中复制:
变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达为:'[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'
// var_-2 results in 0 because of -
var_dump(preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", "var_-2")); // int(0)
// var_2 is a valid identifier so result is 1
var_dump(preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", "var_2")); // int(1)