我正在为我的网站做一个PHP“交通灯”风格的警告系统,基本上是说“如果当前数组条目和下一个条目之间有X百分比的变化,就会抛出错误”。
所以,我在foreach循环中循环我的数组元素,但是需要能够做这样的事情:(注:这只是一个基本的例子,但应该足以得到的想法)
foreach($array as $a)
{
$thisValue = $a['value'];
$nextValue = next($a['value']);
$percentageDiff = ($nextValue-$thisValue)/$thisValue;
}
我使用了next()标记来获取下一个值,但要知道这只适用于数组。有没有别的东西我可以用来得到下一个foreach项目?
谢谢你的时间!
8条答案
按热度按时间3lxsmp7m1#
用另一种方法来做,存储前一个条目并比较它们。
jchrr9hc2#
答案很简单:不要使用
foreach
循环。使用一个简单的for
循环:ykejflvf3#
您应该能够用途:
这将复制数组,然后将指针沿着移动1。
wfauudbj4#
最简单的方法就是改变你的心态。不检查当前记录和下一个记录,而是检查上一个记录和当前记录。记住上一个比记住下一个更容易。
如果你不想这样,你也可以抛弃
foreach
,使用for
和一个计数器变量进行C风格的迭代--但有一点需要注意:PHP的稀疏数组可能会让您吃不消,因此最好在迭代之前对检查过的数组调用array_values()
。ddarikpa5#
如果你想使用
foreach
,你可以将当前值与 previous 值进行比较,而不是与下一个值进行比较:这样,您只需将整个迭代移动一个项目。
koaltpgm6#
为什么不使用普通的for循环而不是foreach迭代器呢?
ca1c2owp7#
'使用前一个值通常比使用下一个值更容易:
6jygbczu8#
确实有一些array iterator函数可以支持你所需要的功能,并且简单地使用next()/ prev()等方法循环遍历数组也可以很好地工作,但是上面的解决方案更优雅。
它不适用于foreach,因为foreach创建引用的副本,并且不设置数组本身中的数组指针。
下面是一个可以使用数组迭代器函数用于关联数组的示例: