2013-04-07 35 views
0

我的陣列結構如下 -PHP獲取行列值在多維數組

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] => 
        ) 
     ) 
) 

現在我想結果數組是 -

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

我怎樣才能做到這一點的輸出?我嘗試循環遍歷數組中的每個元素並比較點,但是我沒有找到真正的效果。任何幫助,將不勝感激。

回答

1

如何創建另一個陣列和存儲期望的結果有

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

輸出將是:

Array ([0] => Array ([points] => 10 [details] => Array ([name] => Team A [rank] => 0)) [1] => Array ([points] => 11 [details] => Array ([name] => Team B [rank] => 1))) 
1

有點暴力破解,但它應該工作。

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