次の 2 つの usort 関数は、本稼働環境 (PHP 5.4) で見つからないクロージャのベース ラムダ関数という致命的なエラーをスローします。これは既知の PHP バグであり、今すぐ修正する必要があるようですが ( https://bugs.php.net/bug.php?id=52144 )、まだ発生しています。
とにかく、残念ながら、PHP 構成などの何が問題なのかを突き止める時間がありません。エラーが発生しないように、無名関数を使用せずにこれら 2 つの関数を書き直したいと考えています。
1)キー「位置」の値による多次元配列 ($array) の順序付け:
// 前の配列
配列
(
[0] => 配列
(
[ftid] => 3339685
[位置] => 2
[auswahl] => 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
[auswahl] => 7179726
[keine_antwort] =>
)
)
2) 2 番目の配列 ($position_order) の順序に従った多次元配列 ($array) の順序付け:
// $array before
配列
(
[0] => 配列
(
[ftid] => 3339685
[位置] => 1
[auswahl] => 7179726
[keine_antwort] =>
)
[1] => 配列
(
[ftid] => 3339686
[位置] => 2
[auswahl] => 7179727
[keine_antwort] =>
)
)
// $position_order (キー値は $array のキー '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
[auswahl] => 7179726
[keine_antwort] =>
)
)
特に後者は、「外側」の配列 $position_order を渡す方法がわからないため、頭痛の種になります。