以下两个 usort 函数抛出致命错误Base lambda function forclosure not found in our production environment (PHP 5.4)。这似乎是一个已知的 PHP 错误,现在应该修复 ( https://bugs.php.net/bug.php?id=52144 ),但它仍然发生在我们身上。
无论如何,遗憾的是我们没有时间弄清楚我们的 PHP 配置等有什么问题。我们想在不使用匿名函数的情况下重写这两个函数,以便不再发生错误。
1)通过键“位置”的值对多维数组 ($array) 进行排序:
// 之前的数组
大批
(
[0] => 数组
(
[ftid] => 3339685
[位置] => 2
[澳大利亚] => 7179726
[keine_antwort] =>
)
[1] => 数组
(
[ftid] => 3339686
[位置] => 1
[auswahl] => 7179727
[keine_antwort] =>
)
)
// FUNCTION THAT NEEDS TO BE REWRITTEN
usort($array, function($a, $b) {
return $a['position'] - $b['position'];
});
// 之后的数组
大批
(
[0] => 数组
(
[ftid] => 3339686
[位置] => 1
[auswahl] => 7179727
[keine_antwort] =>
)
[1] => 数组
(
[ftid] => 3339685
[位置] => 2
[澳大利亚] => 7179726
[keine_antwort] =>
)
)
2)根据第二个数组($position_order)的顺序对多维数组($array)进行排序:
// $array 之前
大批
(
[0] => 数组
(
[ftid] => 3339685
[位置] => 1
[澳大利亚] => 7179726
[keine_antwort] =>
)
[1] => 数组
(
[ftid] => 3339686
[位置] => 2
[auswahl] => 7179727
[keine_antwort] =>
)
)
// $position_order (key value对应$array中的key 'ftid'
大批
(
[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);
});
// $数组
大批
(
[0] => 数组
(
[ftid] => 3339686
[位置] => 2
[auswahl] => 7179727
[keine_antwort] =>
)
[1] => 数组
(
[ftid] => 3339685
[位置] => 1
[澳大利亚] => 7179726
[keine_antwort] =>
)
)
尤其是后者会让人有些头疼,因为我们不知道如何传递“外部”数组 $position_order。