动态创建PHP数组

时间:2011-10-20 22:37:24

标签: php multidimensional-array

我正在努力让这个工作得最好。在下面的代码中,我从数据库查询中收集数据,并尝试构建一个多维数组对象,该对象将以特定方式保存总计并计算一些信息。问题是,不是得到一个正在递增的值,而是值似乎正在受到分配问题的最后一个值的影响。这是代码:

        $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";

所以 - 每次打印时,'总评论'都应该增加1。到现在为止还挺好。接下来的两个数组将仅打印它们分配的最后一个值,并且不会像它们那样一起添加。为什么不?我试图通过逐字逐句地创建数组并将它们整体分配给包含它们的数组来做另一种方式 - 但这似乎也不起作用。任何见解?

3 个答案:

答案 0 :(得分:0)

先生,我不太清楚为什么你的男女同校没有工作,但在我的第一次测试中,我会更改这些内容:

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

请检查此代码是否对您有所帮助。

答案 1 :(得分:0)

我不知道你如何初始化你的阵列,也许这会有所帮助:

// 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'];

答案 2 :(得分:0)

这些值的print语句依赖于$ 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。如果您想要他们的总和,可以将其添加或添加。

编辑:困扰我的是您的数据结构。它似乎不能很好地代表您的数据。在你的循环中为什么不建立你存储在审查数组基础的有用信息?