2016-06-21 5 views
3

PHP 7がどのようにusort関数で同等の結果を処理するかについては、文書化されていない変更があるようです。PHP 7 usortは配列の最後に同じ項目を追加します。PHP 5では最初に追加されます

$myArray = array(1, 2, 3); 
usort($myArray, function($a, $b) { return 0; }); 
print_r($myArray); 

// PHP 5: 
Array 
(
    [0] => 3 
    [1] => 2 
    [2] => 1 
) 

// PHP 7 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 

つまり、usortは配列の最後に等しい値を追加しますが、PHP 5では最初に追加します。私はこの行動の言及を見つけることができません。

PHP 5の動作を強制する方法はありますか? PHP docsから

+3

私は、 'usort'は安定しているとは保証されておらず、同等の要素のソート順もこれまでに定義されていたとは思いません。 *定義されていない振る舞いに依存している場合は、あなたのアプローチを変更する必要があります。 – deceze

+0

PHP 5では文書化されていない動作でしたが、PHP 7にはまだありますか? –

+4

@Blowski:明示的に定義されていません。 – BoltClock

答えて

8

2つが等しいとした場合、ソートされた配列中のそれらの相対的順序は未定義です。

未定義の動作に依存することは悪い考えです。動作を変更する方法はありません(項目を等しくしないことを別にしてください)。

関連する問題