以下两个 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。