首先,如果标题不是很清楚,对不起。
基本上,我有一个包含 2 个数组的数组,这些数组通过使用 uasort 的脚本。因为对于这个特定的数组,我没有想要的行为,所以我尝试使用尽可能简单的代码来重现我的“错误”:
<?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,第二个数组包含 3.7。
但是当我打印它们时,在通过 uasort (我什么都不做)之后,我的第二个数组首先获得,然后是第一秒:
@@~~}}~~@@
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
}
}
所以basiccaly,我有一个包含2个元素的数组,转到一个不做任何事情的函数uasort,但是一旦它进入,元素就不再正确排序。
根据php手册:
uasort — 使用用户定义的比较函数对数组进行排序并保持索引关联
所以据我了解,如果我没有在我的“用户定义”函数中指定任何内容,那么我的数组中应该没有任何变化?
有谁知道发生了什么?
非常感谢