Php 按值对数组进行排序

Php 按值对数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,我有一个数组,如下所示: Array( [id1] => Array ( /* details */ [unique] => 3 ) [id2] => Array ( /* details */ [unique] => 5 [id3] => Array ( /* details */ [uni

我有一个数组,如下所示:

Array(
    [id1] => Array (
           /* details */
           [unique] => 3
          )
    [id2] => Array (
           /* details */
           [unique] => 5
    [id3] => Array (
           /* details */
           [unique] => 1
    )
)
问题:如何按
唯一
字段对其进行排序,以便将其转换为如下所示

Array(
    [id2] => Array (
           /* details */
           [unique] => 5
          )
    [id1] => Array (
           /* details */
           [unique] => 3
    [id3] => Array (
           /* details */
           [unique] => 1
    )
)

usort函数的经典任务:

<?php
$data = array(
    "id1" => Array (
        "unique" => 3
        ),
    "id2" => Array (
        "unique" => 5),
    "id3" => Array (
        "unique" => 1
        ),
    );

function cmp($a, $b)
// {{{
{
    if ($a["unique"] == $b["unique"]) {
        return 0;
    }
    return ($a["unique"] < $b["unique"]) ? 1 : -1;
}
// }}}

usort($data, "cmp");
var_dump($data);

usort函数的经典任务:

<?php
$data = array(
    "id1" => Array (
        "unique" => 3
        ),
    "id2" => Array (
        "unique" => 5),
    "id3" => Array (
        "unique" => 1
        ),
    );

function cmp($a, $b)
// {{{
{
    if ($a["unique"] == $b["unique"]) {
        return 0;
    }
    return ($a["unique"] < $b["unique"]) ? 1 : -1;
}
// }}}

usort($data, "cmp");
var_dump($data);

使用我的自定义函数,您可以对数组进行排序

function multisort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

multisort ($your_array,"order");

使用我的自定义函数可以对数组进行排序

function multisort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

multisort ($your_array,"order");
通过使用
usort()

产出:

Array
(
    [0] => Array
        (
            [unique] => 5
        )
    [1] => Array
        (
            [unique] => 3
        )
    [2] => Array
        (
            [unique] => 1
        )
)
通过使用
usort()

产出:

Array
(
    [0] => Array
        (
            [unique] => 5
        )
    [1] => Array
        (
            [unique] => 3
        )
    [2] => Array
        (
            [unique] => 1
        )
)

我觉得我在重复我自己,对不起:D

请毫不犹豫地从框架中查看库

[CakePHP]创建了一个很棒的类,它能够使用点语法表示法中的字符串导航到数组中。这个图书馆被称为,看看吧

该方法用于根据“path”属性中的内容对具有键和值的数组进行排序。 它比其他函数更有用,因为它通过保留索引和该数组中包含的所有其他子值(包括更多维度的子数组)对数组进行排序

例如:

$array=array(
“id1”=>数组(
“唯一”=>3,
),
“id2”=>数组(
“唯一”=>5,
),
“id3”=>数组(
“唯一”=>1,
),
);
写下这句话:

/**
*第一个参数:数组
*第二个参数:要保存的数据的“路径”。
*“{s}”表示“匹配任何类型的索引”,用于对匹配的所有索引进行排序
*点“.”用于像对象一样导航到数组中
*“unique”是您希望按其值排序的键
*第三个参数是简单的顺序方法,“升序”或“降序”
*/
$sorted_array=Hash::sort($array,{s}.unique,'asc');
$sorted_array
将等于:

数组(
“id3”=>数组(
“唯一”=>1,
),
“id1”=>数组(
“唯一”=>3,
),
“id2”=>数组(
“唯一”=>5,
),
);

我觉得我在重复我自己,对不起:D

请毫不犹豫地从框架中查看库

[CakePHP]创建了一个很棒的类,它能够使用点语法表示法中的字符串导航到数组中。这个图书馆被称为,看看吧

该方法用于根据“path”属性中的内容对具有键和值的数组进行排序。 它比其他函数更有用,因为它通过保留索引和该数组中包含的所有其他子值(包括更多维度的子数组)对数组进行排序

例如:

$array=array(
“id1”=>数组(
“唯一”=>3,
),
“id2”=>数组(
“唯一”=>5,
),
“id3”=>数组(
“唯一”=>1,
),
);
写下这句话:

/**
*第一个参数:数组
*第二个参数:要保存的数据的“路径”。
*“{s}”表示“匹配任何类型的索引”,用于对匹配的所有索引进行排序
*点“.”用于像对象一样导航到数组中
*“unique”是您希望按其值排序的键
*第三个参数是简单的顺序方法,“升序”或“降序”
*/
$sorted_array=Hash::sort($array,{s}.unique,'asc');
$sorted_array
将等于:

数组(
“id3”=>数组(
“唯一”=>1,
),
“id1”=>数组(
“唯一”=>3,
),
“id2”=>数组(
“唯一”=>5,
),
);

lol Ryan,你认为以前有人问过这个问题吗?:)lol Ryan,你认为以前有人问过这个问题吗?:)