2012-05-05 2 views
0

Как я правильн группе массив: (конечный результат)PHP многомерного Array - Как Group Правильно

Array 
(
    [0] => Array 
     (
      [Player] => CaLvErT 
      [0] => Array 
       (
        [SnapTime] => 1330028992 
        [PlayCount] => 9 
       ) 
     ) 
    [1] => Array 
     (
      [Player] => CaLvErT 
      [0] => Array 
       (
        [SnapTime] => 1330202828 
        [PlayCount] => 8 
       ) 
     ) 
) 

Мой MYSQL/PHP идет с тем, что я пробовал:

 $iTestGrid = array(); 
     $ChartSQL = "SELECT player,snap,count(*) AS pCnt"; 
     $ChartSQL .= " FROM sc".$DBSvr; 
     $ChartSQL .= " WHERE hex(alliance) IN (hex('Twitch'))"; 
     $ChartSQL .= " GROUP BY player,snap"; 
     $ChartSQL .= " ORDER BY player ASC,snap ASC"; 
     $FinalResult = $db-> query($ChartSQL); 
     while ($FinalRow = $db-> fetch_assoc($FinalResult)){ 
      $iTestGrid[] = array(
      'Player' => $FinalRow['player'], 
      array(
       'SnapTime' => (int)$FinalRow['snap'], 
       'PlayCount' => (int)$FinalRow['pCnt'] 
      ) 
      ); 
     } 

В основном хотел знаете, как сгруппировать игрока с тем же именем.

Заранее благодарим за вашу помощь! (Простите меня за то, что я не очень разбираюсь в том, как работают массивы, через книжный магазин весь день/ночь и все еще получаю его части, не так много)

+0

Как вы БД организована? Любые запросы 'SELECT', которые вы можете добавить к вопросу? –

+0

не уверен, что он делает все различия, но я добавил SQL Parm к нему. Надеюсь, это поможет! – sgkdnay

+0

Просто попробуйте, чтобы сервер sql мог с легкостью сортировать данные для вас, так что вам не нужно делать столько циклов над массивом с php. –

ответ

2

Вы хотите что-то подобное, если я правильно понимаю. Вы можете использовать имя игрока в качестве ключа для группировки и нажимать значения проигрывания/отметки времени в один и тот же массив.

<?php 
    $iTestGrid = array(); 
    $ChartSQL = "SELECT player,snap,count(*) AS pCnt"; 
    $ChartSQL .= " FROM sc".$DBSvr; 
    $ChartSQL .= " WHERE hex(alliance) IN (hex('Twitch'))"; 
    $ChartSQL .= " GROUP BY player,snap"; 
    $ChartSQL .= " ORDER BY player ASC,snap ASC"; 
    $FinalResult = $db-> query($ChartSQL); 

    while ($FinalRow = $db-> fetch_assoc($FinalResult)){ 

     if(!isset($iTestGrid[$FinalRow['player']])) 
      $iTestGrid[$FinalRow['player']] = array(); 

     $iTestGrid[$FinalRow['player']][] = 
     array(
      'SnapTime' => (int)$FinalRow['snap'], 
      'PlayCount' => (int)$FinalRow['pCnt'] 
     ); 
    } 

    var_dump($iTestGrid); 
+0

Да, это правильно. Позвольте мне попробовать ваш метод и посмотреть, как это работает для меня. – sgkdnay

+0

Теперь я вижу, что сделано .. Да, это хорошо работает :) В основном говоря mySQL, если это еще не «key'd», то добавьте его, затем нажмите «push» (как вы говорите), добавив «sub-array» «к существующему ключу и повторять до тех пор, пока главный ключ не будет соответствовать, а затем сделайте новый массив, правильно? (надеюсь, что концепция верна) – sgkdnay

+0

Tufan, надеюсь, что вы все еще помогаете мне еще раз, с тем, что вы мне дали выше, как добавить «Player» перед $ FinalRow ['player']? – sgkdnay

0

Может быть, вы могли бы использовать player name S в качестве ключей массива и вставить другие данные внутри этого массива:

$sorted = array(); 
foreach ($result as $value) { 
    $sorted[ $value['Player'] ] = $value[ 0 ]; 
} 
var_dump($sorted); 
+0

с тем, что вам нужно всего лишь настроить новый массив сначала во время цикла, я пишу с телефоном, поэтому он более псевдокод. Замените foreach с помощью while и получите $ value прямо оттуда. –

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