排序多维数组时出现usort错误


Order multidimensional array with usort error

大家好,我正试图用uasort订购这个多维数组,但我不知道问题出在哪里。

这只是uasort的问题,对于,数组都可以。

我会继续调查我的问题在哪里,感谢大家的帮助。

array(4) 
        { ["id_vehiculo"]=> 
                array(4) { [0]=> int(9) 
                           [1]=> int(3) 
                           [2]=> int(1) 
                           [3]=> int(4) 
                         } 
           ["fecha_gps"]=> 
                array(4) { [0]=> string(4) "2014" 
                           [1]=> string(4) "2015" 
                           [2]=> string(4) "2016" 
                           [3]=> string(4) "2017" 
                         } 
           ["id_tipo_posicion"]=> 
                array(4) { [0]=> int(11111) 
                           [1]=> int(22222)
                           [2]=> int(33333)
                           [3]=> int(44444) 
                         } 
           ["cercanos"]=> 
                array(4) { [0]=> int(345)
                           [1]=> int(712) 
                           [2]=> int(10) 
                           [3]=> int(35) 
                         } 
        } 
}
function asd2($matriz_up,$m_vehiculo_distancias){
  $total_vehiculos=count($matriz_up['id_vehiculo']);
  //resetear las keys de vehiculos para coger bien los kms y asignarlos
  $a_vehiculo_distancia = array_values($m_vehiculo_distancias);
    //Asignar ditancias cercanos
    for($i=0;$i<$total_vehiculos;$i++){
       $matriz_up['cercanos'][$i] = $a_vehiculo_distancia[$i];
       echo "id = ".$matriz_up['id_vehiculo'][$i]."<br>";
       echo "pos = ".$matriz_up['id_tipo_posicion'][$i]."<br>";
       echo "fecha = ".$matriz_up['fecha_gps'][$i]."<br>";
       echo "kms = ".$matriz_up['cercanos'][$i]."<br>";
       echo "----------------------<br>";
    }
    echo "----------------------<br>";
    echo "----------------------<br>";
    echo "----------------------<br>";
    uasort($matriz_up, function($a, $b) {
    return $a['cercanos'] - $b['cercanos'];
    });

    for($i=0;$i<$total_vehiculos;$i++){
       $matriz_up['cercanos'][$i] = $a_vehiculo_distancia[$i];
       echo "id = ".$matriz_up['id_vehiculo'][$i]."<br>";
       echo "pos = ".$matriz_up['id_tipo_posicion'][$i]."<br>";
       echo "fecha = ".$matriz_up['fecha_gps'][$i]."<br>";
       echo "kms = ".$matriz_up['cercanos'][$i]."<br>";
       echo "----------------------<br>";
    }
}
$matriz_up['id_vehiculo'][0] = 9;
$matriz_up['fecha_gps'][0] = '2014';
$matriz_up['id_tipo_posicion'][0] = 11111;
$matriz_up['cercanos'][0] = 0;
$matriz_up['id_vehiculo'][1] = 3;
$matriz_up['fecha_gps'][1] = '2015';
$matriz_up['id_tipo_posicion'][1] = 22222;
$matriz_up['cercanos'][1] = 0;
$matriz_up['id_vehiculo'][2] = 1;
$matriz_up['fecha_gps'][2] = '2016';
$matriz_up['id_tipo_posicion'][2] = 33333;
$matriz_up['cercanos'][2] = 0;
$matriz_up['id_vehiculo'][3] = 4;
$matriz_up['fecha_gps'][3] = '2017';
$matriz_up['id_tipo_posicion'][3] = 44444;
$matriz_up['cercanos'][3] = 0;

  $m_vehiculo_distancias[9] = 345;
  $m_vehiculo_distancias[3] = 712;
  $m_vehiculo_distancias[1] = 10;
  $m_vehiculo_distancias[4] = 35;
asd2($matriz_up,$m_vehiculo_distancias);
  1. 你的阵列结构相当疯狂。您应该将相关信息作为一个单元保存在一起,而不是分散在多个阵列上。你应该有一个单元看起来像:

    ['id_vehiculo' => 9, 'fetcha_gps' => 2014, 'id_tipo_posicion' => 11111, ...]
    

    然后你会有一个这样的阵列阵列:

    [
      ['id_vehiculo' => 9, 'fetcha_gps' => 2014, 'id_tipo_posicion' => 11111, ...],
      ['id_vehiculo' => ..., 'fetcha_gps' => ..., 'id_tipo_posicion' => ..., ...],
      ...
    ]
    
  2. 话虽如此,usort在您的情况下不会对您有太大帮助,因为您需要同步地将多个数组排序在一起。为此,有array_multisort:

    array_multisort($matriz_up['cercanos'], $matriz_up['id_vehiculo'], /* list all your arrays here */);
    

好了,伙计们,这里是新的结构:

array(4) {
     [0]=> array(4) {
         ["id_vehiculo"]=> int(9) 
         ["fecha_gps"]=> string(4) "2014" 
         ["id_tipo_posicion"]=> int(11111) 
         ["cercanos"]=> int(345) } 
     [1]=> array(4) { 
        ["id_vehiculo"]=> int(3) 
        ["fecha_gps"]=> string(4) "2015" 
        ["id_tipo_posicion"]=> int(22222) 
        ["cercanos"]=> int(712) } 
     [2]=> array(4) { 
        ["id_vehiculo"]=> int(1) 
        ["fecha_gps"]=> string(4) "2016" 
        ["id_tipo_posicion"]=> int(33333) 
        ["cercanos"]=> int(10) } 
     [3]=> array(4) { ["id_vehiculo"]=> int(4) 
        ["fecha_gps"]=> string(4) "2017" 
        ["id_tipo_posicion"]=> int(44444) 
        ["cercanos"]=> int(35) } 
} 

现在我怎么能按["cercanos"]点菜?

现在我正在移动所有的信息,但"机器人"没有移动,不知道为什么。。。

$prova = array();
foreach ($a_vehiculo_distancia as $key) {
    $prova[] = $key;
}
array_multisort($prova, SORT_ASC, $matriz_up);