array_multi-sort如何使用foreach装载



我需要用一个数组中的值挂载一个array_multissort。我尝试挂载一个字符串concated并调用array多维,如下所示:

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'] );

试试这个代码:

<?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

工作小提琴:点击

最新更新