Php 从数组中的数组创建升序数组
我在PHP中有一个数组,数组中有一个数组,包含name和rank。 我希望队伍按顺序排列。i、 e从1到16Php 从数组中的数组创建升序数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我在PHP中有一个数组,数组中有一个数组,包含name和rank。 我希望队伍按顺序排列。i、 e从1到16 $info = array( array( "Name"=> "Ayush Mishra", "Rank"=> "1"), array( "Name"=> "Ayush Mishra", "Rank"=> "16"), array( "Name"=> "Ayush Mishra", "Rank"=> "14"), array(
$info = array( array( "Name"=> "Ayush Mishra", "Rank"=> "1"),
array( "Name"=> "Ayush Mishra", "Rank"=> "16"),
array( "Name"=> "Ayush Mishra", "Rank"=> "14"),
array( "Name"=> "Ayush Mishra", "Rank"=> "15"),
array( "Name"=> "Ayush Mishra", "Rank"=> "13"),
array( "Name"=> "Ayush Mishra", "Rank"=> "12"),
array( "Name"=> "Ayush Mishra", "Rank"=> "11"),
array( "Name"=> "Ayush Mishra", "Rank"=> "10"),
array( "Name"=> "Ayush Mishra", "Rank"=> "8"),
array( "Name"=> "Ayush Mishra", "Rank"=> "9"),
array( "Name"=> "Ayush Mishra", "Rank"=> "7"),
array( "Name"=> "Ayush Mishra", "Rank"=> "5"),
array( "Name"=> "Ayush Mishra", "Rank"=> "4"),
array( "Name"=> "Ayush Mishra", "Rank"=> "3"),
array( "Name"=> "Ayush Mishra", "Rank"=> "6"),
array( "Name"=> "Ayush Mishra", "Rank"=> "2"), );
我想要上面数组中的这个数组。这是我想要得到的结果数组
$result = array(
array( "Name"=> "Ayush Mishra", "Rank"=> "1"),
array( "Name"=> "Teaser", "Rank"=> "2"),
array( "Name"=> "Pussel", "Rank"=> "3"),
array( "Name"=> "Condomso", "Rank"=> "4"),
array( "Name"=> "Branite", "Rank"=> "5"),
array( "Name"=> "Biknol", "Rank"=> "6"),
array( "Name"=> "Fuckita", "Rank"=> "7"),
array( "Name"=> "James", "Rank"=> "8"),
array( "Name"=> "Babita", "Rank"=> "9"),
array( "Name"=> "Mathse", "Rank"=> "10"),
array( "Name"=> "rohan", "Rank"=> "11"),
array( "Name"=> "Alex", "Rank"=> "12"),
array( "Name"=> "Peter", "Rank"=> "13"),
array( "Name"=> "Gabbar Singh", "Rank"=> "14"),
array( "Name"=> "raghav", "Rank"=> "15"),
array( "Name"=> "Shivam", "Rank"=> "16"),
);
我想要上面的数组作为$info的结果。请给我将$info更改为$result的代码。使用,使用用户定义的比较函数按值对数组排序
usort($info, 'sortfn');
function sortfn($a, $b)
{
if($a['Rank'] == $b['Rank'])
return ($a['Rank'] > $b['Rank']);
else
return ($a['Rank'] < $b['Rank']);
}
usort($info,'sortfn');
函数sortfn($a,$b)
{
如果($a['Rank']=$b['Rank'])
回报($a['Rank']>$b['Rank']);
其他的
回报($a['Rank']<$b['Rank']);
}
不需要更多:
function sort_by_rank($a, $b) {
return $a['Rank'] > $b['Rank'];
}
usort($info, "sort_by_rank");
print_r($info);
输出
Array
(
[0] => Array
(
[Name] => Ayush Mishra
[Rank] => 1
)
[1] => Array
(
[Name] => Ayush Mishra
[Rank] => 2
)
[2] => Array
(
[Name] => Ayush Mishra
[Rank] => 3
)
[3] => Array
(
[Name] => Ayush Mishra
[Rank] => 4
)
[4] => Array
(
[Name] => Ayush Mishra
[Rank] => 5
)
[5] => Array
(
[Name] => Ayush Mishra
[Rank] => 6
)
[6] => Array
(
[Name] => Ayush Mishra
[Rank] => 7
)
[7] => Array
(
[Name] => Ayush Mishra
[Rank] => 8
)
[8] => Array
(
[Name] => Ayush Mishra
[Rank] => 9
)
[9] => Array
(
[Name] => Ayush Mishra
[Rank] => 10
)
[10] => Array
(
[Name] => Ayush Mishra
[Rank] => 11
)
[11] => Array
(
[Name] => Ayush Mishra
[Rank] => 12
)
[12] => Array
(
[Name] => Ayush Mishra
[Rank] => 13
)
[13] => Array
(
[Name] => Ayush Mishra
[Rank] => 14
)
[14] => Array
(
[Name] => Ayush Mishra
[Rank] => 15
)
[15] => Array
(
[Name] => Ayush Mishra
[Rank] => 16
)
)
如果您想保留原始索引(从您的问题来看,这似乎不是一项要求),但如果是这样,则使用
uasort
而不是usort
,您可以定义自己的排序函数:
function cmp($a, $b)
{
if ($a['Rank'] == $b['Rank'])
return 0;
return ($a['Rank'] < $b['Rank']) ? -1 : 1;
}
uasort($info, "cmp");
函数cmp($a,$b)
{
如果($a['Rank']=$b['Rank'])
返回0;
回报($a['Rank']<$b['Rank'])?-1:1;
}
uasort($info,“cmp”);
请注意,我使用了
uasort
而不是usort
,这是因为要维护键。查看更多信息。我想您是想根据排名来订购的
$rank = array();
foreach ($result as $key => $row)
{
$rank[$key] = $row['rank'];
}
array_multisort($rank, SORT_DESC, $result);
这是密码,
$result=$info;
对于($i=0;$i
很抱歉,$info中的名称不全是AYush Mishra,它们与$reuslt中的名称相同。对我来说似乎有些过火,但我想它会产生正确的结果。@sberry我很乐意帮助你。这对我没有帮助。就像我说的,这太过分了,意味着你做的远远超过了你需要做的。内置函数usort
和uasort
可以处理所有这些。您不需要返回-1和1,只需返回$a['Rank']>$b['Rank']
的布尔值即可。是,PHP中的比较运算符执行一些神奇的隐式转换,如果两个字符串都是数字的,则这些转换将处理字符串比较。
$rank = array();
foreach ($result as $key => $row)
{
$rank[$key] = $row['rank'];
}
array_multisort($rank, SORT_DESC, $result);
// this function will sort your multidimensional array by value
function aasort (&$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;
}
$info = array( array( "Name"=> "Ayush Mishra", "Rank"=> "1"),
array( "Name"=> "Ayush Mishra", "Rank"=> "16"),
array( "Name"=> "Ayush Mishra", "Rank"=> "14"),
array( "Name"=> "Ayush Mishra", "Rank"=> "15"),
array( "Name"=> "Ayush Mishra", "Rank"=> "13"),
array( "Name"=> "Ayush Mishra", "Rank"=> "12"),
array( "Name"=> "Ayush Mishra", "Rank"=> "11"),
array( "Name"=> "Ayush Mishra", "Rank"=> "10"),
array( "Name"=> "Ayush Mishra", "Rank"=> "8"),
array( "Name"=> "Ayush Mishra", "Rank"=> "9"),
array( "Name"=> "Ayush Mishra", "Rank"=> "7"),
array( "Name"=> "Ayush Mishra", "Rank"=> "5"),
array( "Name"=> "Ayush Mishra", "Rank"=> "4"),
array( "Name"=> "Ayush Mishra", "Rank"=> "3"),
array( "Name"=> "Ayush Mishra", "Rank"=> "6"),
array( "Name"=> "Ayush Mishra", "Rank"=> "2"), );
aasort($info,"Rank");
echo '<pre>';print_r($info);
Array
(
[0] => Array
(
[Name] => Ayush Mishra
[Rank] => 1
)
[15] => Array
(
[Name] => Ayush Mishra
[Rank] => 2
)
[13] => Array
(
[Name] => Ayush Mishra
[Rank] => 3
)
[12] => Array
(
[Name] => Ayush Mishra
[Rank] => 4
)
[11] => Array
(
[Name] => Ayush Mishra
[Rank] => 5
)
[14] => Array
(
[Name] => Ayush Mishra
[Rank] => 6
)
[10] => Array
(
[Name] => Ayush Mishra
[Rank] => 7
)
[8] => Array
(
[Name] => Ayush Mishra
[Rank] => 8
)
[9] => Array
(
[Name] => Ayush Mishra
[Rank] => 9
)
[7] => Array
(
[Name] => Ayush Mishra
[Rank] => 10
)
[6] => Array
(
[Name] => Ayush Mishra
[Rank] => 11
)
[5] => Array
(
[Name] => Ayush Mishra
[Rank] => 12
)
[4] => Array
(
[Name] => Ayush Mishra
[Rank] => 13
)
[2] => Array
(
[Name] => Ayush Mishra
[Rank] => 14
)
[3] => Array
(
[Name] => Ayush Mishra
[Rank] => 15
)
[1] => Array
(
[Name] => Ayush Mishra
[Rank] => 16
)
)
$result = $info;
for ($i = 0; $i < count($result); $i++)
{
for ($j = 0; $j < $i; $j++)
{
//sorting based on rank
if($result[$i]["Rank"] < $result[$j]["Rank"])
{
//Swapping rank
$rank = $result[$i]["Rank"];
$result[$i]["Rank"] = $result[$j]["Rank"];
$result[$j]["Rank"] =$rank;
//Swapping corresponding Names
$name = $result[$i]["Name"];
$result[$i]["Name"] = $result[$j]["Name"];
$result[$j]["Name"] =$name;
}
}
}