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,你认为以前有人问过这个问题吗?:)