PHP获取多维数组中的值的等级

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);