Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php-排序函数不会对标记进行排序_Php_Arrays_Sorting - Fatal编程技术网

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);
当I
var_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
您确定这是您需要的排序吗?检查