我使用在https://stackoverflow.com/a/25749660处找到的答案,以便按最喜欢的语言对$_SERVER['HTTP_ACCEPT_LANGUAGE']
数组进行排序。
在该答案中(顺便说一句效果很好),一行是:
list($a, $b) = explode('-', $match[1]) + array('', '');
在PhpStorm中,该行出现以下错误:
“未使用的局部变量$ b:该变量的值将立即被覆盖。”
我对这条线到底在做什么有些困惑,所以我不知道我是否应该保持不变,还是应该将其修改为:
list($a) = explode('-', $match[1]) + array('', '');
...似乎也可以正常工作。
应该更改吗?
答案 0 :(得分:0)
措辞令人困惑,因为它是对涵盖两种情况的检查的完整解释,并且初始工具提示仅显示第一行,恰好描述了其他情况。如果您按下 Ctl + F1 ,则可以阅读全文,这更有意义(强调我的意思):
未使用的局部变量'b'。变量的值被覆盖 立即。更少...(Ctrl + F1)
检查信息:以下变量被认为未使用 情况:
- 该变量的值在任何地方都不会使用,或者会立即被覆盖。
- 存储在变量中的引用不在任何地方使用或被立即覆盖。
这正是这里发生的情况:
list($a, $b) = …
$a
稍后使用,但不使用$b
。由于从未使用过$b
,因此效果很好:
list($a) = explode('-', $match[1]) + array('', '');
(请记住,这些检查是为了防止潜在的错误(不一定是错误)。
答案 1 :(得分:-1)
您不能使用算术运算符+
连接数组。基本上,您是在告诉PHP将数组转换为标量类型,然后对其求和,这会产生一个数字(如果数组包含元素,则数组的值为1,否则为0)。
结果是您实际上正在执行以下操作:
list($a, $b) = 2;
PHP得出的结论是,您没有指定足够的元素来定义列表中的所有变量。
要将两个数组连接在一起,请使用array_merge()
。
list($a, $b) = array_merge(explode('-', $match[1]), array('', ''));