Ran*_*ash 36 php arrays foreach
理论上的问题可能没有任何意义但仍然存在,也许有一个聪明的答案.
我想迭代数组并获取它的键和它们的东西.我做的一个简单例子:
foreach($array as $key => $value) {
$other_array[$key] = 'something';
}
Run Code Online (Sandbox Code Playgroud)
现在,在此范围内未使用的PHP Mess Detector
尖叫声$value
.因此,我在想,也许这不是访问keys
我的最佳方式array
.
知道如何做到这一点,没有不必要地取出values
我的array
?它是否有任何重大的性能影响...或者我可能只是偏执狂,应该继续下去而不浪费任何人的时间与愚蠢的问题:).
inq*_*uam 59
你可以这样做
foreach(array_keys($array) as $key) {
// do your stuff
}
Run Code Online (Sandbox Code Playgroud)
这将使foreach迭代一个由数组中的键而不是实际数组组成的数组.请注意,从性能角度来看,它可能并不是更好.
Abc*_*hen 12
只是忽略这条消息.
在PHP中,您使用的方式foreach
是最快的.是的,您应该避免使用未使用的变量,但在这种情况下,您无法避免它,而不会失去一些性能.
例如foreach(array_keys($arr) as $key)
慢约50%至60%的
比foreach($arr as $key => $notUsed)
.
phpmd的这个问题已经被报告在这里和那里也已经拉要求在这里.
在phpmd更新之前,你也可以使用这个小黑客
在/src/main/php/PHPMD/Rule/UnusedLocalVariable.php
方法中的文件collectVariables(..)
(在我的情况下为第123行)替换
if ($this->isLocal($variable))
Run Code Online (Sandbox Code Playgroud)
通过
if ($this->isLocal($variable) && !($this->isChildOf($variable, 'ForeachStatement') && $variable->getName() === '$notUsed'))
Run Code Online (Sandbox Code Playgroud)
这将阻止phpmd报告foreach循环内的$notUsed
任何位置.
更新:
上面的建议假定PHP 5.6(撰写此答案时的相关版本).但是时间过去了,现在使用PHP 7.2它似乎是另一种方式.一如既往,它取决于确切的用例,但对于小于100.000键的关联数组,存储array_keys($arr)
在变量中并在foreach循环中使用它更快.
小智 5
这是有效的 PHP 代码,不要修复代码,而是修复 PHP MD。PHP MD 2.2中有一个配置 并且需要这个规则:
<properties>
<property
name="allow-unused-foreach-variables"
description="Allow unused variables in foreach language constructs."
value="false" />
</properties>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17494 次 |
最近记录: |