正しい並べ替え順序を決定するときに多次元配列を参照するために、「グローバル」宣言を使用するユーザー定義の並べ替え関数があります。PHP 5.1.6 では正常に動作していましたが、5.3.3 では失敗します。
コードは PHP 警告をスローします。
PHP 警告: uksort(): ユーザー比較関数によって配列が変更されました
しかし、コードは間違いなく配列を変更しません。
このコードは問題を複製します。
$arr = array();
$arr['i1']['val1'] = 99;
$arr['i1']['val2'] = 100;
$arr['i2']['val1'] = 89;
$arr['i2']['val2'] = 101;
function cmp($a, $b)
{
global $arr;
if ($arr[$a]['val2'] > $arr[$b]['val2']) { return 1; }
if ($arr[$a]['val2'] < $arr[$b]['val2']) { return -1; }
return 0;
}
if (uksort($arr, 'cmp'))
{
echo "success";
}
else
{
echo "failure";
}