使用带键作为数组键的数组

时间:2016-08-11 01:22:24

标签: php mysql arrays key

我使用带键的数组作为数组的键,在下面的代码中

        $team = array();
        $counter = 0;

        $sql = "SELECT Home, Away, Result, Points FROM schedule";
        $schedulequery = mysqli_query($conn, $sql);

        // divy out the points
        if (mysqli_num_rows($schedulequery) > 0) {
            while($teamrow = mysqli_fetch_assoc($schedulequery)) {

                $points = $teamrow["Points"]; 
                if ($teamrow["Result"] == "Home"){
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;
                }
                if ($teamrow["Result"] == "Tie"){
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + ($points/2);
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + ($points/2);
                }
                if ($teamrow["Result"] == "Away"){
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points;
                }
                if ($teamrow["Result"] == "HomeForfeit"){
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - $points;
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points;
                }
                if ($teamrow["Result"] == "AwayForfeit"){
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2);
                }
                if ($teamrow["Result"] == "DuelForfeit"){
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - ($points/2);
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2);
                }
            }
        }   

每次使用其中一行时,此代码在我的MySql表中工作并成功更新(代码中未包含的部分)我得到了一个" PHP注意:未定义的索引:"错误。

这是不好的做法还是错误的语法?我很困惑为什么它工作,但仍然告诉我未定义的索引。

编辑: 错误输出的行是我访问具有双数组的行的所有时间,例如" $ team [$ teamrow [" Home"]]"。任何时候访问其中一个我得到一个错误。

编辑:我想我明白了......我正在创建一个不存在的数组中的新密钥?

2 个答案:

答案 0 :(得分:0)

答案:我在一个尚不存在的关联数组中创建了一个新索引。这里没有错误代码:

$ team = array();             $ counter = 0;

        $sql = "SELECT Home, Away, Result, Points FROM schedule";
        $schedulequery = mysqli_query($conn, $sql);

        // divy out the points
        if (mysqli_num_rows($schedulequery) > 0) {
            while($teamrow = mysqli_fetch_assoc($schedulequery)) {

                $points = $teamrow["Points"]; 
                if ($teamrow["Result"] == "Home"){
                    if (!isset($team[$teamrow["Home"]])){
                        $team[$teamrow["Home"]] = 0;
                    }

                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;
                }
                if ($teamrow["Result"] == "Tie"){
                    if (!isset($team[$teamrow["Home"]])){
                        $team[$teamrow["Home"]] = 0;
                    }
                    if (!isset($team[$teamrow["Away"]])){
                        $team[$teamrow["Away"]] = 0;
                    }
                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + ($points/2);
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + ($points/2);
                }
                if ($teamrow["Result"] == "Away"){
                    if (!isset($team[$teamrow["Away"]])){
                        $team[$teamrow["Away"]] = 0;
                    }
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points;
                }
                if ($teamrow["Result"] == "HomeForfeit"){
                    if (!isset($team[$teamrow["Home"]])){
                        $team[$teamrow["Home"]] = 0;
                    }
                    if (!isset($team[$teamrow["Away"]])){
                        $team[$teamrow["Away"]] = 0;
                    }

                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - $points;
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] + $points;
                }
                if ($teamrow["Result"] == "AwayForfeit"){
                    if (!isset($team[$teamrow["Home"]])){
                        $team[$teamrow["Home"]] = 0;
                    }
                    if (!isset($team[$teamrow["Away"]])){
                        $team[$teamrow["Away"]] = 0;
                    }

                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2);
                }
                if ($teamrow["Result"] == "DuelForfeit"){
                    if (!isset($team[$teamrow["Home"]])){
                        $team[$teamrow["Home"]] = 0;
                    }
                    if (!isset($team[$teamrow["Away"]])){
                        $team[$teamrow["Away"]] = 0;
                    }

                    $team[$teamrow["Home"]] = $team[$teamrow["Home"]] - ($points/2);
                    $team[$teamrow["Away"]] = $team[$teamrow["Away"]] - ($points/2);
                }
            }
        }   

答案 1 :(得分:0)

从我能说出的问题可能是像$team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;这样的行。

在代码的开头,您将$team初始化为没有索引或值的空数组。然后在你的while循环中你有像$team[$teamrow["Home"]] = $team[$teamrow["Home"]] + $points;这样的行,问题是=的右边。 $team[$teamrow["Home"]]的值在第一次迭代中被添加到$points(当$ team被称为空数组时)?

因为看起来你正在使用整数,所以在你的while循环开始时我将执行以下操作

if(!isset($team[$teamrow["Home"]]))
{
    $team[$teamrow["Home"]] = 0;
}

同样我也会对$team[$teamrow["Away"]]做同样的事情。这样,如果$team[$teamrow["Home"]]未定义,则它将被赋予值0

相关问题