まず、タイトルがわかりにくかったらすいません。
基本的に、uasort を使用するスクリプトを通過する 2 つの配列を含む配列があります。この特定の配列では、必要な動作がなかったため、「バグ」を再現するできるだけ単純なコードを使用してみました。
<?php
$myArray = array(
0 => array(
0 => array( 'field1' => "2.1",
'filed2' => 1815199),
1 => "database.table",
2 => array(),
3 => NULL
),
1 => array(
0 => array( 'field1' => "3.7",
'filed2' => 1815199),
1 => "database.table",
2 => array(),
3 => NULL
)
);
echo '@@~~}}~~@@ ';
var_dump( $myArray);
uasort( $myArray, "order_del_upd_ins" );
echo '@@~~{{~~@@ ';
var_dump( $myArray);
function order_del_upd_ins( $a, $b )
{
echo '~~@@~~@@##@@~~@@~~ ';
var_dump( $a);
var_dump( $b);
return 0;
}?>
したがって、基本的に、最初の配列には値 2.1 が含まれ、2 番目の配列には 3.7 が含まれます。
しかし、それらを印刷すると、uasort (何もしない場所) を通過した後、2 番目の配列が最初に取得され、最初の 2 番目の配列が取得されます。
@@~~}}~~@@
array(2) {
[0] => array(4) {
[0] =>
array(2) {
'field1' => string(3) "2.1"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
[1] => array(4) {
[0] => array(2) {
'field1' => string(3) "3.7"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
}
~~@@~~@@##@@~~@@~~
array(4) {
[0] =>
array(2) {
'field1' => string(3) "3.7"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
array(4) {
[0] => array(2) {
'field1' => string(3) "2.1"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
@@~~{{~~@@
array(2) {
[1] => array(4) {
[0] =>
array(2) {
'field1' => string(3) "3.7"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
[0] => array(4) {
[0] =>
array(2) {
'field1' => string(3) "2.1"
'filed2' => int(1815199)
}
[1] => string(14) "database.table"
[2] => array(0) {}
[3] => NULL
}
}
基本的に、私は2つの要素の配列を持っていて、何もしない関数uasortに行きますが、それが入るとすぐに、要素は適切に順序付けられなくなります。
PHPマニュアルによると:
uasort — ユーザー定義の比較関数を使用して配列をソートし、インデックスの関連付けを維持する
したがって、私が理解していることから、「ユーザー定義」関数で何も指定しない場合、配列で何も変更されないはずですよね??
誰が何が起こっているのか考えていますか?
どうもありがとう