2016-04-11 11 views
-1

こんにちは、私はこの多次元配列をuasortで注文しようとしていますが、どこに問題があるのか​​わかりません。多次元配列をusortエラーで注文する

これは問題の原因であり、配列はすべて問題ありません。

私はどこで問題が発生しているか調査します。

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); 
+0

正気配列構造に切り替えてみてください知っている: '[0 => [ 'id_vehiculo' => ...、...]、1 => ['id_vehiculo' => ...、...]] '。すべての 'usort'の例はおそらく、このような構造を想定しています。 – deceze

+0

はい、それは解決策ですが、私はcodで多くの変更を行う必要があります。 –

答えて

0
  1. あなたの配列構造は、かなり非常識です。関連情報は、複数の配列に分散されず、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 */); 
    
-1

オーケー、ここでみんな、新しい構造:

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"]で注文することができますか? 「

は今、私はすべての情報を移動していますが、[「cercanos」]はいけないを移動しなかった理由...

$prova = array(); 

foreach ($a_vehiculo_distancia as $key) { 

    $prova[] = $key; 

} 

array_multisort($prova, SORT_ASC, $matriz_up); 
+0

*この配列構造では、元の 'uasort'はうまく動作します。また、フォローアップコメント/新しい質問を回答として投稿しないでください。 – deceze