Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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,可能重复: 我想按数组中的值对数组进行排序。我尝试了usort,但它导致了一些意想不到的结果,即实际上更改了输出的值,而不仅仅是移动数组中的元素 下面是我要排序的数组: Array ( [element1] => Array ( [Total] => 1 [paTotal] => 0 [totalPreregistrations] => 7 [totalPreregistrationsToDate]

可能重复:

我想按数组中的值对数组进行排序。我尝试了
usort
,但它导致了一些意想不到的结果,即实际上更改了输出的值,而不仅仅是移动数组中的元素

下面是我要排序的数组:

Array
(
[element1] => Array
    (
        [Total] => 1
        [paTotal] => 0
        [totalPreregistrations] => 7
        [totalPreregistrationsToDate] => 26
        [pas] => Array
            (
                [0] => Array
                    (
                        [id] => 119
                    )

            )

    )

[element2] => Array
    (
        [Total] => 1
        [paTotal] => 0
        [totalPreregistrations] => 0
        [totalPreregistrationsToDate] => 58
        [pas] => Array
            (
                [0] => Array
                    (
                        [id] => 107
                    )

            )

    )
... element3, 4, etc...
我想按“totalPreregistrations”编号排序,这样如果element2的totalPreregistrations计数高于element1,element2就会高于element1

当然,我也希望保留子数组

谢谢大家!


您可以使用
uasort
而不是
usort

uasort($array, function ($a, $b) {
    $a = $a['totalPreregistrations'];
    $b = $b['totalPreregistrations'];
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);
});


echo "<pre>";
print_r($array);
uasort($array,function($a,$b){
$a=$a['totalPreregistrations'];
$b=$b['totalPreregistrations'];
回报($a=$b)?0:($a<$b)?-1:1);
});
回声“;
打印(数组);
输出

数组
(
[element2]=>数组1
[paTotal]=>0
[totalPreregistrations]=>0
[TotalPreRegistrationToDate]=>58
[pas]=>阵列
(
[0]=>阵列
(
[id]=>107
)
)
)
[element1]=>数组
(
[总数]=>1
[paTotal]=>0
[totalPreregistrations]=>7
[TotalPreRegistrationToDate]=>26
[pas]=>阵列
(
[0]=>阵列
(
[id]=>119
)
)
)
)

请发布您尝试的解决方案的代码。`尝试了usort,但它会导致一些意外的结果'??什么样的结果。。能否添加
usort
的实现。。你也可以添加你的数组的序列化版本我想我明白你的意思了…只要它不是重复的。。。。。他需要保留元素键。。使用时会丢失钥匙usort@Baba这在问题中没有具体说明,但我怀疑这不会破坏原始密钥名“element1”、“element2”等吗?可能吧。将其从
usort()
更改为
uasort()
。这很有效!我不得不把-1改成1,把1改成-1,这样它就会倒过来。我使用的是usort而不是uasort,这是主要问题。谢谢大家!+1这与Sammitch的溶液相同,但双三元溶液非常优雅。
uasort($array, function ($a, $b) {
    $a = $a['totalPreregistrations'];
    $b = $b['totalPreregistrations'];
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);
});


echo "<pre>";
print_r($array);
Array
(
    [element2] => Array <-------------------------- element key remains intact 
        (
            [Total] => 1
            [paTotal] => 0
            [totalPreregistrations] => 0
            [totalPreregistrationsToDate] => 58
            [pas] => Array
                (
                    [0] => Array
                        (
                            [id] => 107
                        )

                )

        )

    [element1] => Array
        (
            [Total] => 1
            [paTotal] => 0
            [totalPreregistrations] => 7
            [totalPreregistrationsToDate] => 26
            [pas] => Array
                (
                    [0] => Array
                        (
                            [id] => 119
                        )

                )

        )

)