Простая проблема с массивом PHP и сравнение ключей - PullRequest
1 голос
/ 21 февраля 2011

Я выдергивал свои волосы на этом весь день.По сути, у меня есть длинная таблица значений (хранится в SQL), и я хочу просмотреть всю таблицу и подсчитать, сколько раз каждое значение отображается.Я назвал значения «pid» целыми числами.

Лучший способ, которым я подумал сделать это, - создать массив с PID в качестве ключа массива и количеством повторений каждого PID.в таблице как значение этого ключа.Затем просмотрите весь список и либо добавьте PID в массив, если он еще не существует, либо увеличьте значение щелчка, если оно уже существует.Цель состоит в том, чтобы выяснить, какой PID имеет наибольшее количество кликов.

Звучит просто, и это так!Я думаю, что у меня должна быть ошибка в моем синтаксисе где-то, потому что все кажется правильным.Я впервые работаю с массивами в PHP, так что будьте добры:)

Большое спасибо!

$tabulation = array();

while ($row = mysql_fetch_array($result)) {
    $pid = $row[1];  

    //if this post isn't in the tabulation array, add it w a click value of 1
    if ( !isset( $tabulation[$pid] ) ){ array_push( $tabulation[$pid], 1 ); }
    //if this post is already in the tabulation array, incrment its click value by 1
    else { 
        $t = $tabulation[$pid]; $t++; $tabulation[$pid] = $t;
    }
}

$highestClicksValue = -1;
$highestClicksPID = -1;
foreach ($tabulation as $pid => $clicks){
    if ($clicks > $highestClicksValue){ $highestClicksPID = $pid; }
    printf("PID: ". $tabulation[$pid] . " clicks: " . $tabulation[$clicks] . "<br />");
}

Ответы [ 2 ]

5 голосов
/ 21 февраля 2011

Я знаю, что вы ищете ответ на PHP, но считаете ли вы, что в этом SQL лучше?

select pid,count(*)
  from theTable
 group by pid
 order by count(*) desc

Просто мысль ...

0 голосов
/ 21 февраля 2011

Почему вы используете ключ массива и значение в качестве ключей для $ tabulation в последнем foreach?Это должно работать ...

$tabulation = array();

while ($row = mysql_fetch_array($result)) {
    $pid = $row[1];  

    //if this post isn't in the tabulation array, add it w a click value of 1
    if ( ! isset( $tabulation[$pid] ))
      $tabulation[$pid] = 1;
    //if this post is already in the tabulation array, incrment its click value by 1
    else
      $tabulation[$pid]++;
}

arsort($tabulation);
$highestClicksValue = reset($tabulation);
$highestClicksPID = key($tabulation);
foreach ($tabulation as $pid => $clicks){
    print("PID: ". $pid . " clicks: " . $clicks . "<br />");
}
...