Reputation: 506
I have this array in PHP, in which i have an array in array which contains name and rank. I want the ranks to be in the order. i.e from 1 to 16.
$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"), );
I want this array from the above array. This is the result array i want to get.
$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"),
);
I want the above array as result from $info. Please give me the codes to make $info change to $result.
Upvotes: 4
Views: 154
Reputation: 640
You wanted to order it based on the rank, I guess.
Here's the code,
$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;
}
}
}
Upvotes: 0
Reputation: 11709
// 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);
Output:
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
)
)
Upvotes: 1
Reputation: 132018
No need for anything more than this:
function sort_by_rank($a, $b) {
return $a['Rank'] > $b['Rank'];
}
usort($info, "sort_by_rank");
print_r($info);
OUTPUT
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
)
)
If you want to maintain the original indexes, which from your question it does not appear to be a requirement, but if so, then use uasort
instead of usort
.
Upvotes: 4
Reputation: 139
$rank = array();
foreach ($result as $key => $row)
{
$rank[$key] = $row['rank'];
}
array_multisort($rank, SORT_DESC, $result);
Upvotes: -1
Reputation: 3192
You can define your own sort function:
function cmp($a, $b)
{
if ($a['Rank'] == $b['Rank'])
return 0;
return ($a['Rank'] < $b['Rank']) ? -1 : 1;
}
uasort($info, "cmp");
Note that I used uasort
not usort
, that's because of maintaining keys. Check documentation for more info.
Upvotes: 1
Reputation: 46910
<?php
$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"), );
foreach ($info as $key => $row) {
$rank[$key] = $row[rank];
$name[$key] = $row['name'];
}
array_multisort($rank, SORT_DESC, $name, SORT_ASC, $info);
print_r($info);
?>
Upvotes: 1