2016-10-03 4 views
-1
$arr = Array 
    (
    Array(
      "id" => "1", 
      "player_name" => "Jack", 
      "type" => "Arcades", 
      "high_score"=> "10000", 
      "score"=> "500", 
     ), 
    Array(
      "id" => "1", 
      "player_name" => "Jack", 
      "type" => "Racing", 
      "high_score"=> "12000", 
      "score"=> "700", 
     ), 
    Array(
      "id" => "2", 
      "player_name" => "Steve", 
      "type" => "Racing", 
      "high_score"=> "10000", 
      "score"=> "400", 
     ), 
    Array(
      "id" => "2", 
      "player_name" => "Steve", 
      "type" => "Arcades", 
      "high_score"=> "12000", 
      "score"=> "600", 
     ), 
    Array(
      "id" => "2", 
      "player_name" => "Steve", 
      "type" => "Casual", 
      "high_score"=> "14000", 
      "score"=> "650", 
     ), 
    Array(
      "id" => "2", 
      "player_name" => "Steve", 
      "type" => "Strategy", 
      "high_score"=> "10000", 
      "score"=> "500", 
     ), 
    ); 

Ожидаемый выход:Многомерный массив PHP Group?

$arr = Array (
    '1'=> 
    Array(
      "id" => "1", 
      "player_name" => "Jack", 
      "type" => "Arcades,Racing", 
      "high_score"=> "12000", 
      "score"=> "1200", 
     ), 
    '2'=> 
    Array(
      "id" => "2", 
      "player_name" => "Steve", 
      "type" => "Racing,Arcades,Casual,Strategy", 
      "high_score"=> "14000", 
      "score"=> "2150", 
     ), 
); 

Я смущен о том, как использовать многомерный группировать массив как ожидаемого результата. Мой старший предложил мне использовать многомерный массив, потому что я пробовал его много раз, и я не знаю, как сгруппировать массив, может кто-нибудь мне помочь!

ответ

1
foreach($arr as $val) 
{ 
    $newarray[$val['id']]['id']=$val['id']; 
    $newarray[$val['id']]['player_name']=$val['player_name']; 
    $newarray[$val['id']]['type']=isset($newarray[$val['id']]['type'])?$newarray[$val['id']]['type'].','.$val['type']:$val['type']; 
    $newarray[$val['id']]['high_score']=$val['high_score']; 
     $newarray[$val['id']]['score']=isset($newarray[$val['id']]['score'])?$val['score']+$newarray[$val['id']]['score']:$val['score']; 
} 
print_r($newarray); 
+0

@nice ... но это даст high_score, как 10000 для идентификатора 2, который является 14 000, но в целом короткими и быстро :) +1 за короткий ответ – user1234

+0

также могут рекорды быть проверен с условием в каждой итерации – Shahrukh

+0

спасибо для помощи! –

0

Hi Попробуйте этот.

$output = array(); 
foreach($arr as $array){  
    if(array_key_exists($array['id'],$output)){ 
     $output[$array['id']][0]['type'] = $output[$array['id']][0]['type'].','.$array['type']; 
     $output[$array['id']][0]['high_score'] = $output[$array['id']][0]['high_score'] > $array['high_score'] ? $output[$array['id']][0]['high_score'] : $array['high_score']; 
     $output[$array['id']][0]['score'] = $output[$array['id']][0]['score'] + $array['score']; 

    }else { 
     $output[$array['id']][] = $array; 
     } 

} 

echo "<pre>";print_r($output); 

Выход

Array 
(
    [1] => Array 
     (
      [0] => Array 
       (
        [id] => 1 
        [player_name] => Jack 
        [type] => Arcades,Racing 
        [high_score] => 12000 
        [score] => 1200 
       ) 

     ) 

    [2] => Array 
     (
      [0] => Array 
       (
        [id] => 2 
        [player_name] => Steve 
        [type] => Racing,Arcades,Casual,Strategy 
        [high_score] => 14000 
        [score] => 2150 
       ) 

     ) 

) 
0

Вот ваше решение.

$res = []; 
$highScore = []; 
$type = []; 
$score= []; 
foreach($arr as $val){ 
    $highScore[$val['player_name']][] = $val['high_score']; 
    $type[$val['player_name']][] = $val['type']; 
    $score[$val['player_name']][] = $val['score']; 
    $res[$val['id']] = $val;   
    $res[$val['id']]['high_score'] = !empty($highScore[$val['player_name']])? max($highScore[$val['player_name']]) : ''; 
    $res[$val['id']]['type'] = !empty($type[$val['player_name']]) ? implode(',',$type[$val['player_name']]) : ''; 
    $res[$val['id']]['score'] = !empty($score[$val['player_name']]) ? array_sum($score[$val['player_name']]) : 0; 
} 
echo '<pre>'; print_r($res); 
+0

Но если я добавлю еще один массив: - Array ("id" => "1", "player_name" => "Mark", "type" => "Racing", "high_score" => "12000", "score "=>" 500 ",), первое имя записи становится Mark, любые идеи для разделения массива 1-й группы на 2 записи, в группе 1 есть 2 записи, такие как гнездо и отметка? –

+0

спасибо за помощь! –

Смежные вопросы