1

次の 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 を渡す方法がわからないため、頭痛の種になります。

4

1 に答える 1