2016-04-12 56 views
1

我需要使用一個數組中的值裝載array_multisort。 我tryied安裝concated一個字符串,並在array_multidimensional喜歡這裏呼籲:array_multisort如何使用foreach掛載

function ordenar_matriz_ultima_posicion_por_distancia($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); 
    $ordenar = array(); 

    foreach ($a_vehiculo_distancia as $key) { 
     $ordenar[] = $key; 
    } 

    sort($m_vehiculo_distancias); 

    $string= ""; 
    $ultim_key = end(array_keys($matriz_up)); 
    foreach ($matriz_up as $key => $valor) { 

    if ($key != $ultim_key) $string.= $matriz_up[$key].','; 
    else $string.= $matriz_up[$key]; 

    $aaa = '$matriz_up[$key]'; 
    } 

    echo $string; 
    echo "<br>"; 

    array_multisort($ordenar, SORT_ASC, $string); 


    for($i=0;$i<$total_vehiculos;$i++){ 
     $matriz_up['cercanos'][$i] = $m_vehiculo_distancias[$i]; 

    echo $matriz_up['id_vehiculo'][$i]."<br>"; 
    echo $matriz_up['fecha_gps'][$i]."<br>"; 
    echo $matriz_up['id_tipo_posicion'][$i]."<br>"; 
    echo $matriz_up['cercanos'][$i]."<br>"; 
    echo $matriz_up['vaina'][$i]."<br>"; 
    echo "------------<br>"; 
    } 

    return $matriz_up; 
} 

$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['vaina'][0] = 12345; 

$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['vaina'][1] = 5555; 

$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['vaina'][2] = 988; 

$matriz_up['id_vehiculo'][3] = 4; 
$matriz_up['fecha_gps'][3] = '2017'; 
$matriz_up['id_tipo_posicion'][3] = 44444; 
$matriz_up['cercanos'][3] = 0; 
$matriz_up['vaina'][3] = 777; 


    $m_vehiculo_distancias[9] = 345; 
    $m_vehiculo_distancias[3] = 712; 
    $m_vehiculo_distancias[1] = 10; 
    $m_vehiculo_distancias[4] = 35; 
ordenar_matriz_ultima_posicion_por_distancia($matriz_up,$m_vehiculo_distancias); 

有了這個作品在array_multisort,但我需要把所有的鑰匙,而無需手動放..

array_multisort($ordenar, SORT_ASC, $matriz_up['id_vehiculo'], $matriz_up['fecha_gps'], $matriz_up['id_tipo_posicion'], $matriz_up['vaina']); 

回答

1

試試這個代碼:

<?php 

$matriz_up = $m_vehiculo_distancias = array(); 

$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['vaina'][0] = 12345; 

$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['vaina'][1] = 5555; 

$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['vaina'][2] = 988; 

$matriz_up['id_vehiculo'][3] = 4; 
$matriz_up['fecha_gps'][3] = '2017'; 
$matriz_up['id_tipo_posicion'][3] = 44444; 
$matriz_up['cercanos'][3] = 0; 
$matriz_up['vaina'][3] = 777; 


$m_vehiculo_distancias[9] = 345; 
$m_vehiculo_distancias[3] = 712; 
$m_vehiculo_distancias[1] = 10; 
$m_vehiculo_distancias[4] = 35; 


function sortArray($arrayToSortParam, $orderArray) 
{ 
    $result = array(); 
    $arrayToSort = $arrayToSortParam; 

    $keys = array_keys($arrayToSort); 

    asort($orderArray, true); 


    $newSort = $cercanos = array(); 
    foreach($orderArray as $key => $value) 
    { 
     $newSort[] = array_keys($arrayToSort['id_vehiculo'], $key)[0]; 
     $cercanos[] = $orderArray[$key]; 
    } 

    foreach($keys as $keyName) 
    { 
     uksort($arrayToSort[$keyName], function($key1, $key2) use ($newSort) { 
      return (array_search($key1, $newSort) > array_search($key2, $newSort)); 
     }); 
    } 

    $arrayToSort['cercanos'] = $cercanos; 

    //reset indexes 
    foreach($keys as $keyName) 
    { 
     $arrayToSort[$keyName] = array_values($arrayToSort[$keyName]); 
    } 

    return $arrayToSort; 

} 


echo '<pre>'; 
//print_r($matriz_up); 
//print_r($m_vehiculo_distancias); 

print_r(sortArray($matriz_up, $m_vehiculo_distancias)); //this is result 

工作小提琴:CLICK!

+0

嘿,這是非常接近我所需要的,但在這裏: [cercanos] =>陣列 ( [2] => 0 [3] => 0 [0] => 0 [1] => 0 ) 的值是0,並且我需要順序等並用鍵將重設: [cercanos] =>數組 ( [0] => 10 [1] => 35 [2] = > 345 [3] => 712 ) –

+0

@ SebasBejenaru,我編輯了我的答案,檢查了這一點。 – aslawin

+0

嘿aslawin,我需要相同的你在[cercanos]鍵0,1,2,3 ...等 –