0

首先,如果标题不是很清楚,对不起。

基本上,我有一个包含 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 — 使用用户定义的比较函数对数组进行排序并保持索引关联

所以据我了解,如果我没有在我的“用户定义”函数中指定任何内容,那么我的数组中应该没有任何变化?

有谁知道发生了什么?

非常感谢

4

1 回答 1

0

用户定义的排序函数的返回将确定数组的排序方式。例如,以下将按升序排序...

function order_del_upd_ins( $a, $b )
{
   return $a > $b;
}

你说“如果我没有在我的排序函数中指定任何东西”,但你确实指定了 0 ,这等于 $a 和 $b 相等。

在这里查看解释.. http://www.php.net/manual/en/function.usort.php

于 2013-03-12T18:22:05.880 回答