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