PHP:使用给定的字段顺序,按比级别1维度值更深的维度对多数组进行排序

PHP:使用给定的字段顺序,按比级别1维度值更深的维度对多数组进行排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我的阵列: $MY_ARRAY = Array ( [0] => Array ( [0] => 2861 [1] => Array ( [start_month] => 6 [start_year] => 1970 [end_month] =&

我的阵列:

$MY_ARRAY = 
Array
(
    [0] => Array
        (
            [0] => 2861
            [1] => Array
                (
                    [start_month] => 6
                    [start_year] => 1970
                    [end_month] => 12
                    [end_year] => 1990
                    [experience_info] => "Practically a random string"
                )

        )

)
我想对
$MY_ARRAY
按其内部内容对子对象进行排序, 理想情况下,顺序为开始年、开始月、结束年、结束月。我想我可以以某种方式使用
数组\u multisort()
,但我不知道如何使用。有人知道怎么处理吗

谢谢


编辑:正如它所显示的,解决方案很好而且简单,我不知道的是,在回调比较函数中的比较过程中,您可以转到更深的结构-因此,如果您的比lvl-1更深的索引始终保持不变(我的情况),这就是如何做到的:)

为此,您可以使用函数:

function compare_callback($arr1, $arr2) {
    $start_year1 = $arr1[1]['start_year'];
    $start_year2 = $arr2[1]['start_year'];

    $start_month1 = $arr1[1]['start_month'];
    $start_month2 = $arr2[1]['start_month'];

    $end_year1 = $arr1[1]['end_year'];
    $end_year2 = $arr2[1]['end_year'];

    $end_month1 = $arr1[1]['end_month'];
    $end_month2 = $arr2[1]['end_month'];

    return ($start_year1 === $start_year2)
        ? (($start_month1 === $start_month2)
            ? (($end_year1 === $end_year2)
                ? (($end_month1 === $end_month2)
                    ? 0
                    : (($end_month1 < $end_month2) ? -1 : 1))
                : (($end_year1 < $end_year2) ? -1 : 1))
            : ($start_month1 < $start_month2) ? -1 : 1)
        : (($start_year1 < $start_year2) ? -1 : 1);
}

uasort($array, 'compare_callback');
函数比较\u回调($arr1,$arr2){
$start_year1=$arr1[1][‘start_year’];
$start_year2=$arr2[1][‘start_year';
$start_month1=$arr1[1][‘start_month1’;
$start_month2=$arr2[1][‘start_month2’;
$end_year1=$arr1[1]['end_year';
$end_year2=$arr2[1]['end_year';
$end_month1=$arr1[1][‘end_month’;
$end_month2=$arr2[1][‘end_month’;
返回($start\u year1===$start\u year2)
($start\u month1===$start\u month2)
($end_year1===$end_year2)
($end\u month1===$end\u month2)
? 0
:($end_month1<$end_month2)?-1:1)
:($end_year1<$end_year2)?-1:1)
:($start\u month1<$start\u month2)?-1:1)
:($start_year1<$start_year2)?-1:1);
}
uasort($array,'compare_callback');
您可以使用PHP函数并提供自己的比较函数。像这样:

function cmp($a, $b)
{
    if ($a[1]['start_year'] == $b[1]['start_year'])
    {
        // You can further do tests for start_month, etc in here if start_years are equal
        return 0;
    }
    return ($a[1]['start_year'] > $b[1]['start_year']) ? 1 : -1;
}

usort($MY_ARRAY, "cmp");

以上内容将按开始年份对阵列进行排序。我还没有测试代码,但它应该可以工作。

执行以下操作:

$newArray = array();
foreach($MY_ARRAY as $value) {
    $newArray[] = $value[1];
}
multi_sort($newArray, $MY_ARRAY);

也许您可以暂时将这些对象添加到最外层,然后使用
多重排序
?为了得到正确的答案,我会再显示一个或两个“条目”来显示它是如何嵌套的。@JacobBudin只要“level 1”索引在更改,任何更深的索引都保持不变。但从我的描述中我想这是很清楚的:)@AkshatSinghal我想到过类似的事情,但我总是在其中迷失-你能建议一个代码吗?@jave.web使用
$newArray[0]=$my_array[0][1]创建另一个具有内部值的数组,比如$newArray,然后执行
多重排序($newArray,$my_array)
,本着接受答案的精神,这个答案完全否定了这个问题——被接受了,因为这显示了“ORDER BY”thingie:)@jave.web尼斯问题:)事实上这不是重复的。我认为您需要编辑问题标题以使其更清晰。类似这样的内容:“按给定的字段顺序对多数组排序”。