array_multisort 如何用foreach挂载

array_multisort how to mount with foreach

我需要用一个数组中的值装载一个 array_multisort。 我尝试安装一个连接的字符串并调用 array_multidimensional 就像这里:

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

工作fiddle:CLICK!