My array structure is as follows -
Array
(
[0] => Array
(
[points] => 10
[details] => Array
(
[name] => Team A
[rank] =>
)
)
[1] => Array
(
[points] => 10
[details] => Array
(
[name] => Team B
[rank] =>
)
)
[2] => Array
(
[points] => 8
[details] => Array
(
[name] => Team C
[rank] =>
)
)
[3] => Array
(
[points] => 6
[details] => Array
(
[name] => Team D
[rank] =>
)
)
)
Now I want result array to be -
Array
(
[0] => Array
(
[points] => 10
[details] => Array
(
[name] => Team A
[rank] => 1
)
)
[1] => Array
(
[points] => 10
[details] => Array
(
[name] => Team B
[rank] => 1
)
)
[2] => Array
(
[points] => 8
[details] => Array
(
[name] => Team C
[rank] => 2
)
)
[3] => Array
(
[points] => 6
[details] => Array
(
[name] => Team D
[rank] => 3
)
)
)
How can I achieve this output ? I tried looping through each element in array and comparing points, but I didn't find that really efficeint. Any help would be appreciated.
How about to create another array and store desired result there
$array = array(
array(
"points" => 10,
"details" => array(
"name" => "Team A",
"rank" => ""
)
),
array(
"points" => 11,
"details" => array(
"name" => "Team B",
"rank" => ""
)
)
);
$c = 0; // count identifier
$n = array(); // create new array
for ($i=0;$i<count($array);$i++){ // loop through each array
foreach ($array[$i] as $value){ // loop through into sub arrays
if (is_array($value)){
$n[$i]['details'] = array(
"name" => $value['name'],
"rank" => $c
);
$c++;
} else {
$n[$i]['points'] = $value;
}
}
}
print_r($n);
Output will be:
Array ( [0] => Array ( [points] => 10 [details] => Array ( [name] => Team A [rank] => 0 ) ) [1] => Array ( [points] => 11 [details] => Array ( [name] => Team B [rank] => 1 ) ) )
A bit bruteforce but it should work.
$array = array(
array(
"points" => 10,
"details" => array(
"name" => "Team A",
"rank" => ""
)
),
array(
"points" => 11,
"details" => array(
"name" => "Team B",
"rank" => ""
)
),
array(
"points" => 10,
"details" => array(
"name" => "Team A",
"rank" => ""
)
),
array(
"points" => 11,
"details" => array(
"name" => "Team B",
"rank" => ""
)
)
);
$points = array();
foreach($array as $key => $arr){
$points[] = $arr['points'];
}
asort($points);
foreach($points as $pkey => $point){
foreach($array as $akey => $arr){
if($point == $arr['points']){
$array[$akey]['details']['rank'] = $pkey+1;
}
}
}
var_dump($array);