1
以下两个usort函数引发致命错误在我们的生产环境(PHP 5.4)中发现基于闭包lambda函数。这似乎是一个已知的PHP错误,现在应该修复(https://bugs.php.net/bug.php?id=52144),但它仍然适用于我们。因致命错误而重写usort函数(PHP bug)
无论如何,我们很遗憾没有时间弄清楚我们的PHP配置等有什么问题。我们想在不使用匿名函数的情况下重写这两个函数,以避免错误再次发生。
1)排序方式键的 “位置” 值的多维阵列($阵列)的:
// ARRAY BEFORE Array ( [0] => Array ( [ftid] => 3339685 [position] => 2 [auswahl] => 7179726 [keine_antwort] => ) [1] => Array ( [ftid] => 3339686 [position] => 1 [auswahl] => 7179727 [keine_antwort] => ) )
// FUNCTION THAT NEEDS TO BE REWRITTEN
usort($array, function($a, $b) {
return $a['position'] - $b['position'];
});
// ARRAY AFTER Array ( [0] => Array ( [ftid] => 3339686 [position] => 1 [auswahl] => 7179727 [keine_antwort] => ) [1] => Array ( [ftid] => 3339685 [position] => 2 [auswahl] => 7179726 [keine_antwort] => ) )
2)多维数组的排序($阵列)($ position_order):
// $array before Array ( [0] => Array ( [ftid] => 3339685 [position] => 1 [auswahl] => 7179726 [keine_antwort] => ) [1] => Array ( [ftid] => 3339686 [position] => 2 [auswahl] => 7179727 [keine_antwort] => ) ) // $position_order (key value corresponds to key 'ftid' in $array Array ( [3339686] => 1 [3339685] => 2 )
// FUNCTION THAT NEEDS TO BE REWRITTEN
usort($array, function($a, $b) use($position_order) {
return (isset($position_order[$a['ftid']]) ? ($position_order[$a['ftid']] - $position_order[$b['ftid']]) : 1);
});
// $array Array ( [0] => Array ( [ftid] => 3339686 [position] => 2 [auswahl] => 7179727 [keine_antwort] => ) [1] => Array ( [ftid] => 3339685 [position] => 1 [auswahl] => 7179726 [keine_antwort] => ) )
特别是后者导致一些头痛,因为我们不知道如何传递“外部”数组$ position_order。
也许是原始数组和结果数组的一个例子。 – AbraCadaver
它工作还是找到别的东西? – AbraCadaver