php-排序函数不会对标记进行排序
我使用以下函数对数组进行排序php-排序函数不会对标记进行排序,php,arrays,sorting,Php,Arrays,Sorting,我使用以下函数对数组进行排序 function array_sort($array, $on, $order=SORT_ASC){ $new_array = array(); $sortable_array = array(); if (count($array) > 0) { foreach ($array as $k => $v) { if (is_array($v)) { for
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
$prevnext = array_sort($prevnext, 'distance-between', SORT_ASC);
当Ivar_dump()时
sorted array($prevnext),我得到了预期的结果,但是当我var_dump($prevnext[0])代码>,它并没有给我想要的,而是排序前的数据
我是否误解了分拣?是否有一种方法可以根据key的特定值对数组重新排序。因此,当我使用$prevnext[0]
时,我会得到重新排序的数据。任何帮助都将不胜感激
var_dump($prevnext)代码>给出以下数组,该数组使用键之间的距离进行排序:
array(11) { [10]=> array(7) { [0]=> string(3) "284" ["c_service_id"]=> string(3) "284" [1]=> string(14) "McGill Buckley" ["service_name"]=> string(14) "McGill Buckley" [2]=> string(7) "K2B 6V2" ["service_zip"]=> string(7) "K2B 6V2" ["distance-between"]=> float(9.24) } [0]=> array(7) { [0]=> string(4) "1319" ["c_service_id"]=> string(4) "1319" [1]=> string(38) "MDS MacFarlane Data & Mailing Services" ["service_name"]=> string(38) "MDS MacFarlane Data & Mailing Services" [2]=> string(7) "K1B 3V9" ["service_zip"]=> string(7) "K1B 3V9" ["distance-between"]=> float(11.66) } [6]=> array(7) { [0]=> string(4) "1270" ["c_service_id"]=> string(4) "1270" [1]=> string(38) "MDS MacFarlane Data & Mailing Services" ["service_name"]=> string(38) "MDS MacFarlane Data & Mailing Services" [2]=> string(7) "K1B 3V9" ["service_zip"]=> string(7) "K1B 3V9" ["distance-between"]=> float(11.66) } [7]=> array(7) { [0]=> string(4) "1268" ["c_service_id"]=> string(4) "1268" [1]=> string(31) "Evoke Direct Response Solutions" ["service_name"]=> string(31) "Evoke Direct Response Solutions" [2]=> string(7) "K2M 1X5" ["service_zip"]=> string(7) "K2M 1X5" ["distance-between"]=> float(13.48) } [3]=> array(7) { [0]=> string(4) "1293" ["c_service_id"]=> string(4) "1293" [1]=> string(24) "Creative Signs & Designs" ["service_name"]=> string(24) "Creative Signs & Designs" [2]=> string(7) "K1Z 7S8" ["service_zip"]=> string(7) "K1Z 7S8" ["distance-between"]=> float(27.43) } [9]=> array(7) { [0]=> string(3) "289" ["c_service_id"]=> string(3) "289" [1]=> string(8) "seoplus+" ["service_name"]=> string(8) "seoplus+" [2]=> string(7) "K2B 1A5" ["service_zip"]=> string(7) "K2B 1A5" ["distance-between"]=> float(32.32) } [5]=> array(7) { [0]=> string(4) "1275" ["c_service_id"]=> string(4) "1275" [1]=> string(35) "Innovacom Marketing & Communication" ["service_name"]=> string(35) "Innovacom Marketing & Communication" [2]=> string(7) "K1M 1L5" ["service_zip"]=> string(7) "K1M 1L5" ["distance-between"]=> float(43.62) } [8]=> array(7) { [0]=> string(4) "1267" ["c_service_id"]=> string(4) "1267" [1]=> string(27) "Rideau Mailing Services Inc" ["service_name"]=> string(27) "Rideau Mailing Services Inc" [2]=> string(7) "K2E 7K1" ["service_zip"]=> string(7) "K2E 7K1" ["distance-between"]=> float(45.74) } [2]=> array(7) { [0]=> string(4) "1294" ["c_service_id"]=> string(4) "1294" [1]=> string(21) "Agent Signs & Designs" ["service_name"]=> string(21) "Agent Signs & Designs" [2]=> string(7) "K1Y 0T8" ["service_zip"]=> string(7) "K1Y 0T8" ["distance-between"]=> float(50.11) } [1]=> array(7) { [0]=> string(4) "1297" ["c_service_id"]=> string(4) "1297" [1]=> string(21) "Golden Triangle Signs" ["service_name"]=> string(21) "Golden Triangle Signs" [2]=> string(7) "K0A 1B0" ["service_zip"]=> string(7) "K0A 1B0" ["distance-between"]=> float(57.39) } [4]=> array(7) { [0]=> string(4) "1280" ["c_service_id"]=> string(4) "1280" [1]=> string(32) "Aditek Design Printing And Signs" ["service_name"]=> string(32) "Aditek Design Printing And Signs" [2]=> string(7) "K1G 3W3" ["service_zip"]=> string(7) "K1G 3W3" ["distance-between"]=> float(64.13) } }
但是当我使用$prevnext[0]
时,它不会给出与上面相同的结果。我得到:
array(7) { [0]=> string(4) "1319" ["c_service_id"]=> string(4) "1319" [1]=> string(38) "MDS MacFarlane Data & Mailing Services" ["service_name"]=> string(38) "MDS MacFarlane Data & Mailing Services" [2]=> string(7) "K1B 3V9" ["service_zip"]=> string(7) "K1B 3V9" ["distance-between"]=> float(11.66) }
我应该在哪里得到:
array(7) { [0]=> string(3) "284" ["c_service_id"]=> string(3) "284" [1]=> string(14) "McGill Buckley" ["service_name"]=> string(14) "McGill Buckley" [2]=> string(7) "K2B 6V2" ["service_zip"]=> string(7) "K2B 6V2" ["distance-between"]=> float(9.24) }
当var_dump($prevnext[0])时,应显示上面的数组代码>首先,因为它之间的距离最小。使用以下方法对数组索引进行排序
function sort_by_order ($a, $b)
{
return $a['order'] - $b['order'];
}
usort($array, 'sort_by_order ');
用于对数组索引进行排序
function sort_by_order ($a, $b)
{
return $a['order'] - $b['order'];
}
usort($array, 'sort_by_order ');
您正在使用asort
您确定这是您需要的排序吗?检查您使用的是asort
您确定这是您需要的排序吗?检查