在今天之前,我从未在 PHP 中看到过 SegFault,但显然这是可能的。起初我以为是 mysql 驱动程序,但事实证明这是我的代码;)。
我花了大约 2 天的时间调试我的代码并最终找到了它的原因(所以对于所有遇到此问题的未来 PHP 程序员,欢迎您!)
长话短说,你不能unset()
在你正在走路的同一个阵列上做一个array_walk()
。
目的是消除 $this->votes 中不存在于 $out 数组中的所有元素(其中 $this->votes 的键与 $out 中元素之一的 id 属性匹配)。
我遇到的问题大约是代码运行正常的一半时间,而另一半代码会因 apache 日志中的分段错误而崩溃(这使得调试非常困难,因为直到我注意到这个错误之前已经有一段时间了)。
是的,这是一段经过深思熟虑的代码......
array_walk($this->votes, function(&$o, $key) use($that, $out) {
$found = array_filter($out, function($p) use($key) {
return $p['id'] == $key;
});
if(count($found) == 0) {
unset($this->votes[$key]); //very very bad!!!!
}
});