2015-11-02 155 views
-1

结合不同的数组值我有一个这样的数组:如何与公共密钥

Array 
(
    [0] => Array 
     (
      [minutesPlayed] => 0 
      [totalSecondsPlayed] => 0 
      [flagrantFouls] => 0 
      [foulsReceived] => 0 
      [blocksReceived] => 0 
      [plusMinus] => 0 
      [player] => Array 
       (
        [playerId] => 830651 
        [firstName] => Walter 
        [lastName] => Tavares 
        [uniform] => 21 
       ) 

      [fieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [freeThrows] => Array 
       (
        [made] => 12 
        [attempted] => 4 
       ) 

      [threePointFieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

     ) 

    [1] => Array 
     (
      [minutesPlayed] => 0 
      [totalSecondsPlayed] => 0 
      [flagrantFouls] => 0 
      [foulsReceived] => 0 
      [blocksReceived] => 0 
      [plusMinus] => 0 
      [player] => Array 
       (
        [playerId] => 830651 
        [firstName] => John 
        [lastName] => Tavares 
        [uniform] => 22 
       ) 

      [fieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [freeThrows] => Array 
       (
        [made] => 12 
        [attempted] => 6 
       ) 

      [threePointFieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 
     ) 

    [2] => Array 
     (
      [minutesPlayed] => 0 
      [totalSecondsPlayed] => 0 
      [flagrantFouls] => 0 
      [foulsReceived] => 0 
      [blocksReceived] => 0 
      [plusMinus] => 0 
      [player] => Array 
       (
        [playerId] => 830651 
        [firstName] => Adrian 
        [lastName] => Tavares 
        [uniform] => 23 
       ) 

      [fieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [freeThrows] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [threePointFieldGoals] => Array 
       (
        [made] => 12 
        [attempted] => 8 
       ) 
     ) 
    [3] => Array 
     (
      [minutesPlayed] => 0 
      [totalSecondsPlayed] => 0 
      [flagrantFouls] => 0 
      [foulsReceived] => 0 
      [blocksReceived] => 0 
      [plusMinus] => 0 
      [player] => Array 
       (
        [playerId] => 830651 
        [firstName] => Adrian 
        [lastName] => Methue 
        [uniform] => 24 
       ) 

      [fieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [freeThrows] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 

      [threePointFieldGoals] => Array 
       (
        [made] => 0 
        [attempted] => 0 
       ) 
    ) 
) 

我希望它是这样的:

Array 
(
    [fieldGoals] => Array 
      [0](
        [player_name]=>Walter Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [1](
        [player_name]=>John Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [2](
        [player_name]=>Adrian Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [3](
        [player_name]=>Adrian Methue 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
    [freeThrows] => Array 
      [0](
        [player_name]=>Walter Tavares 
        [playerId] => 830651 
        [made] => 12 
        [attempted] => 4 
      ) 
      [1](
        [player_name]=>John Tavares 
        [playerId] => 830651 
        [made] => 12 
        [attempted] => 6 
      ) 
      [2](
        [player_name]=>Adrian Tavares 
        [playerId] => 830651 
        [made] => 12 
        [attempted] => 8 
      ) 
      [3](
        [player_name]=>Adrian Methue 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
    [threePointFieldGoals] => Array 
      [0](
        [player_name]=>Walter Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [1](
        [player_name]=>John Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [2](
        [player_name]=>Adrian Tavares 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 
      [3](
        [player_name]=>Adrian Methue 
        [playerId] => 830651 
        [made] => 0 
        [attempted] => 0 
      ) 

) 

这是我做过什么,到目前为止:

foreach($myArr as $playerStatsKey=>$playerStatsArray){ 
       if(!is_array($playerStatsArray)){ 
        continue; 
       } 
      foreach($playerStatsArray as $playkey=>$playVal){ 
       if(!is_array($playVal)){ 
        continue; 
       } 
       if($playkey=='player'){ 
          $playerInfo[$playkey]['made'] = $playVal['made']; 
          $playerInfo[$playkey]['attempted'] = $playVal['attempted']; 
        } 
        $arr[$playkey] = $playerInfo; 
        $arr[$playkey] = $playVal['made']; 
        $arr[$playkey] = $playVal['attempted']; 

       } 
       echo '<pre>' ;print_r($arr ); 

我只是想结合不同的数组值与共同的key.how我可以做到这一点吗?

+1

使用array_merge – aldrin27

+0

我没有两个不同的数组。我想根据一些关键字分开数组,因为我在我的问题中询问 – Rahul

回答

2

你在这里。此功能会做你的任务:

function combinePlayers($array) { 
    $return_array = array(); 
    foreach ($array as $element) { 
     //collect data for the new player object 
     $player = array(
      'player_name' => $element['player']['firstName'] . ' ' . $element['player']['lastName'], 
      'playerId' => $element['player']['playerId'] 
     ); 
     foreach ($element as $key => $value) { 
      if (is_array($value) && $key != 'player') { 
       //collect the keys to build the structure of the $return_array 
       if (! array_key_exists($key, $return_array)) { 
        $return_array[ $key ] = array(); 
       } 
       //collect the returning values from the input array 
       array_push($return_array[ $key ], array_merge($value, $player)); 
      } 
     } 
    } 
    return $return_array; 
} 

此功能遍历输入数组,并收集了哪些不是玩家信息的阵列值。同样在迭代中,它会创建一个新的玩家对象,它将合并为所有值。

1
Try like this.. 
It will return the combined result array as you want. I hope this will help. 

foreach($myArr as $playerStatsKey=>$playerStatsArray){ 
    $arr['fieldGoals'][] = array(
           'player_name'=>$playerStatsArray['player']['firstName']." ".$playerStatsArray['player']['lastName'], 
           'playerId'=>$playerStatsArray['player']['playerId'], 
           'made'=>$playerStatsArray['fieldGoals']['made'], 
           'attempted'=>$playerStatsArray['fieldGoals']['attempted'] 
           ); 

    $arr['freeThrows'][] = array(
           'player_name'=>$playerStatsArray['player']['firstName']." ".$playerStatsArray['player']['lastName'], 
           'playerId'=>$playerStatsArray['player']['playerId'], 
           'made'=>$playerStatsArray['freeThrows']['made'], 
           'attempted'=>$playerStatsArray['freeThrows']['attempted'] 
           ); 

    $arr['threePointFieldGoals'][] = array(
           'player_name'=>$playerStatsArray['player']['firstName']." ".$playerStatsArray['player']['lastName'], 
           'playerId'=>$playerStatsArray['player']['playerId'], 
           'made'=>$playerStatsArray['threePointFieldGoals']['made'], 
           'attempted'=>$playerStatsArray['threePointFieldGoals']['attempted'] 
           ); 
} 
echo '<pre>' ;print_r($arr);