Php 使用usort错误对多维数组进行排序
大家好,我正试图用uasort订购这个多维数组,但我不知道问题出在哪里 这只是问题所在,阵列都可以 我会继续调查我的问题,谢谢大家的帮助Php 使用usort错误对多维数组进行排序,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,大家好,我正试图用uasort订购这个多维数组,但我不知道问题出在哪里 这只是问题所在,阵列都可以 我会继续调查我的问题,谢谢大家的帮助 array(4) { ["id_vehiculo"]=> array(4) { [0]=> int(9) [1]=> int(3) [2]=> int(1)
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);
数组(4)
{[“id_vehiculo”]=>
数组(4){[0]=>int(9)
[1] =>int(3)
[2] =>int(1)
[3] =>int(4)
}
[“fecha_gps”]=>
数组(4){[0]=>字符串(4)“2014”
[1] =>字符串(4)“2015”
[2] =>字符串(4)“2016”
[3] =>字符串(4)“2017”
}
[“id\u tipo\u posicion”]=>
数组(4){[0]=>int(11111)
[1] =>int(22222)
[2] =>int(33333)
[3] =>int(44444)
}
[“塞尔卡诺斯”]=>
数组(4){[0]=>int(345)
[1] =>int(712)
[2] =>int(10)
[3] =>int(35)
}
}
}
函数asd2($matriz_up,$m_vehicle_distance){
$total_vehiculos=计数($matriz_up['id_vehiculos']);
//重新设置公里和亚洲的车辆钥匙
$a_vehiculo_distance=数组值($m_vehiculo_distance);
//塞尔卡诺斯亚洲酒店
对于($i=0;$i)
你的阵列结构相当疯狂。你应该将相关信息作为一个单元放在一起,而不是分散在多个阵列上。你应该有一个单元,看起来像:
['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' => ..., ...],
...
]
话虽如此,usort
对您的情况没有多大帮助,因为您需要同步排序多个数组。为此,有:
好了,伙计们,这里是新的结构:
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=>['id\u vehiculo'=>…,…],1=>['id\u vehiculo'=>…,…]
。所有usort
示例可能都采用了这样的结构,这也更加合理。是的,这是一个解决方案,但..我必须对cod做很多更改..使用此数组结构,您原来的uasort
将很好地工作。此外,不要将后续评论/新问题作为答案,例如ase。
$prova = array();
foreach ($a_vehiculo_distancia as $key) {
$prova[] = $key;
}
array_multisort($prova, SORT_ASC, $matriz_up);