Создавайте массивы PHP на лету - PullRequest
0 голосов
/ 21 октября 2011

У меня самое плохое время, чтобы заставить это работать.В следующем коде я собираю данные из запроса к базе данных и пытаюсь построить объект многомерного массива, который будет хранить итоги и подсчитывать некоторую информацию определенным образом.Проблема в том, что вместо получения значения, которое увеличивается, как и должно быть, значение, похоже, страдает от последнего значения, которому было присвоено значение проблемы.Вот код:

        $REVIEWS      = array();
        $USER_REVIEWS = array();
        $USER_IMGREVS = array();


        pseudo-code: loop here which iterates over the DB results creating
        $date - which is into this function as its called for each day of month
        $p1user - which is one of the users (there are 3) 'levels' of users
        $hr - is the hour which is built from the transaction's timestamp

        $hr     = date('H', $row['P1TIMESTAMP']);
        $p1user = $row['P1USER'];

        $REVIEWS[$date] += 1;
        $USER_REVIEWS[$date][$p1user][$hr] += 1;
        $USER_IMGREVS[$date][$p1user][$hr] += $row['F5'];

        print "PASS1<br/>\n";
        print "Value of Total Reviews: [".$REVIEWS[$date]."]<br/>\n";
        print "Value of User Reviews: [".$USER_REVIEWS[$date][$p1user][$hr]."]<br/>\n";
        print "Value of Reviewed Images: [".$USER_IMGREVS[$date][$p1user][$hr]."]<br/>\n";
        print "<br/><br/>\n";

Итак - «общее количество отзывов» увеличивается на единицу, как и должно быть, за каждый раз, когда я распечатываю это.Все идет нормально.Следующие два массива будут печатать только последние значения, которые им были назначены, и не будут добавлены вместе, как они должны.Почему бы и нет?Я попытался сделать это по-другому, буквально создавая массивы один за другим и присваивая их целиком массиву, содержащему их, но это также, похоже, не работает.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 21 октября 2011

Я не знаю, как вы инициализируете свой массив, может быть, это поможет:

// replace this 2 lines:
$USER_REVIEWS[$date][$p1user][$hr] += 1;
$USER_IMGREVS[$date][$p1user][$hr] += $row['F5'];

// with this code:
if (!isset($USER_REVIEWS[$date]))
    $USER_REVIEWS[$date] = array();
if (!isset($USER_REVIEWS[$date][$p1user]))
    $USER_REVIEWS[$date][$p1user] = array();
if (!isset($USER_REVIEWS[$date][$p1user][$hr]))
    $USER_REVIEWS[$date][$p1user][$hr] = 0;
$USER_REVIEWS[$date][$p1user][$hr] += 1;

if (!isset($USER_IMGREVS[$date]))
    $USER_IMGREVS[$date] = array();
if (!isset($USER_IMGREVS[$date][$p1user]))
    $USER_IMGREVS[$date][$p1user] = array();
if (!isset($USER_IMGREVS[$date][$p1user][$hr]))
    $USER_IMGREVS[$date][$p1user][$hr] = 0;
$USER_IMGREVS[$date][$p1user][$hr] += $row['F5'];
0 голосов
/ 21 октября 2011

Ваши операторы печати для этих значений зависят от значения $ p1user:

print "Value of User Reviews: [".$USER_REVIEWS[$date][$p1user][$hr]."]<br/>\n";
print "Value of Reviewed Images: [".$USER_IMGREVS[$date][$p1user][$hr]."]<br/>\n";

Если вы хотите распечатать его для всех пользователей, вам следует перебрать всех возможных пользователей, а не просто использовать $ p1user. Либо так, либо сложите их, если хотите их сумму.

Редактировать: Что-то, что беспокоило меня, было вашей структурой данных. Похоже, они не очень хорошо представляют ваши данные. В своем цикле, почему бы вам не собрать полезную информацию, которую вы храните в базе массива обзора?

0 голосов
/ 21 октября 2011

Сэр, я не очень хорошо понимаю, почему ваш студент не работает, но в моем первом тесте я бы изменил эти строки:

$count = 1;
$USER_REVIEWS[$count][$p1user][$hr] += 1;
$USER_IMGREVS[$count][$p1user][$hr] += $row['F5'];
$count++;

Пожалуйста, проверьте, помогает ли вам этот код в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...