根据内部数组的值对多维数组排序


Ordering multidimensional array based on a value if its inner array

我有以下数组:

Array
(
    [0] => Array
        (
            [0] => 2
            [1] => 1
            [2] => Text
            [3] => 0
        )
    [1] => Array
        (
            [0] => 3
            [1] => 1
            [2] => Another Text
            [3] => 0
        )   
}

我需要根据内部数组的索引号2的值对外部数组进行排序,所以它将是:

Array
(
    [0] => Array
        (
            [0] => 2
            [1] => 1
            [2] => Another Text
            [3] => 0
        )
    [1] => Array
        (
            [0] => 3
            [1] => 1
            [2] => Text
            [3] => 0
        )   
}

我找到了像sort()array_multisort()这样的方法,但似乎它们不适合这种情况。而且原始数组有很多项,所以它应该是一个快速的算法。

对于这种情况,php有实现的方法吗?

好吧,我不能说这将有多快,但你不能这样做:

$tmpArray = array();
foreach($multiDimArray as $index=>$array)
{
    $tmpArray[$array[2]] = $index;
}
ksort($tmpArray);
$finalArray = array();
foreach($tmpArray as $sortedIndex)
{
    $finalArray[] = $multiDimArray[$sortedIndex];
}

虽然,我相信一定有一个更优雅的方法来做到这一点

您可以使用ussort函数,如:

function sortBySecondIndex($a,$b) {
    return strnatcmp($a[2],$b[2]);
}
usort($array,"sortBySecondIndex");