使用键排序多维数组

时间:2017-04-25 05:25:42

标签: php arrays sorting multidimensional-array

排序多维数组

$list = array_sort($list, 'name', SORT_ASC);
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;
}
//Prepare Array List
$list = array(
    array('type' => 'suite', 'name' => 'A-Name'),
    array('type' => 'suite', 'name' => 'C-Name'),
    array('type' => 'suite', 'name' => 'B-Name'),
);
$list = array_sort($list, 'name', SORT_ASC);

1 个答案:

答案 0 :(得分:0)

我看到你找到了一个解决方案,但万一我会写下我的答案,也许有人发现它很有用

<?php
    $order_by = "asc";
    $list = array(
        array('type' => 'suite', 'name' => 'A-Name'),
        array('type' => 'suite', 'name' => 'C-Name'),
        array('type' => 'suite', 'name' => 'B-Name'),
    );
    usort($list, "customSort");

    function customSort($a, $b) {
        global $order_by;

        $compare = strcmp($a['name'], $b['name']);

        if($compare == 0) {
            return 0;
        } else if($compare > 0) {
            if($order_by == "asc") {
                return 1;
            } else {
                return -1;
            }
        } else if($compare < 0) {
            if($order_by == "asc") {
                return -1;
            } else {
                return 1;
            }
        }
    }

    echo "<pre>".print_r($list, true);