1

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

4

1 回答 1

0

有人可能会想出一个更好的 usort 实现,但至少对于第一个,我是这样做的:

function array_column_sort(&$array, $column, $sort=SORT_ASC) {
    foreach($array as $key => $val) {
        $sort_array[$key] = $val[$column];
    }
    array_multisort($sort_array, $sort, $array);
}

适用于第二个(可能需要更好的函数名称):

function array_column_sort_array(&$array, $column, $sort_array) {
    foreach($array as $val) {
        $result[$sort_array[$val[$column]]] = $val;
    }
    ksort($result);
    $array = array_values($result);
}
于 2013-10-25T19:29:53.187 回答