PHP在数组中使用常量

时间:2017-03-07 07:46:14

标签: php arrays

我正在学习PHP 并尝试继续学习更高级的“东西”我的讲座告诉我们,最好的学习方法之一是使用/浏览/浏览开源代码。

我正在检查一个开源项目的代码,并尝试稍微调整一下代码。

功能如下:

 function calculateStats() {
    global $mysqli, $weekStats, $playerTotals, $possibleScoreTotal;
    //get latest week with all entered scores
    $lastCompletedWeek = getLastCompletedWeek();

    //loop through weeks
    for ($week = 1; $week <= $lastCompletedWeek; $week++) {
        //get array of games
        $games = array();
        $sql = "select * from schedule where weekNum = " . $week . " order by gameTime, gameID";
        $query = $mysqli->query($sql);
        while ($row = $query->fetch_assoc()) {
            $games[$row['gameID']]['gameID'] = $row['gameID'];
            $games[$row['gameID']]['homeID'] = $row['homeID'];
            $games[$row['gameID']]['awayID'] = $row['visitorID'];
            if ((int)$row['homeScore'] > (int)$row['visitorScore']) {
                $games[$row['gameID']]['winnerID'] = $row['homeID'];
            }
            if ((int)$row['visitorScore'] > (int)$row['homeScore']) {
                $games[$row['gameID']]['winnerID'] = $row['visitorID'];
            }
        }

            $playerPicks = array();
        $playerWeeklyTotals = array();
        $sql = "select p.userID, p.gameID, p.pickID, p.points, u.firstname, u.lastname, u.userName ";
        $sql .= "from picks p ";
        $sql .= "inner join users u on p.userID = u.userID ";
        $sql .= "inner join schedule s on p.gameID = s.gameID ";
        $sql .= "where s.weekNum = " . $week . " and u.userName <> 'admin' ";
        $sql .= "order by u.lastname, u.firstname, s.gameTime";
        $query = $mysqli->query($sql);
        while ($row = $query->fetch_assoc()) {
            $playerPicks[$row['userID'] . $row['gameID']] = $row['pickID'];
            $playerWeeklyTotals[$row['userID']][week] = $week;
            $playerTotals[$row['userID']][wins] += 0;
            $playerTotals[$row['userID']][name] = $row['firstname'] . ' ' . $row['lastname'];
            $playerTotals[$row['userID']][userName] = $row['userName'];
            if (!empty($games[$row['gameID']]['winnerID']) && $row['pickID'] == $games[$row['gameID']]['winnerID']) {
                //player has picked the winning team
                $playerWeeklyTotals[$row['userID']][score] += 1;
                $playerTotals[$row['userID']][score] += 1;
            } else {
                $playerWeeklyTotals[$row['userID']][score] += 0;
                $playerTotals[$row['userID']][score] += 0;
            }
        }
    }
}

echo calculateStats();

当我调用该函数时,收到以下错误消息:

使用未定义的常数周 - 假定为'周'

使用未定义的常量胜利 - 假定为'胜利'

它为循环中的每个索引提供了相同的错误消息,其中不包含''(引号)

当我在循环中的常量之间添加''(引号)时,我得到一个未定义的索引错误

问题

  1. 为什么他们在数组变量的循环中使用常量?
  2. 为什么在调用函数时出现错误Use of undefined constant week - assumed 'week',我可以采取哪些步骤来纠正错误?
  3. 为什么以下变量声明为全局global $weekStats, $playerTotals, $possibleScoreTotal;
  4. 注意:为了防止代码在问题中变长,我想在函数$lastCompletedWeek = getLastCompletedWeek();中添加第4行正常工作,即getLastCompletedWeek()返回正确的结果,以便将正确的结果传递给{{1内部函数。

    我希望我的问题有道理,如果您需要更多信息,请告诉我,非常感谢!

    项目can be found here

    的链接

3 个答案:

答案 0 :(得分:1)

他们没有使用任何常量。

  

为什么他们在数组变量的循环中使用常量?

他们应该将[ { id : 1, title : "La danza del fuego", author : "Mago de Oz", album : "Finisterra", genre : "Folk", duration : 132132312321, // miliseconds cover : "file:///sdcard/0/123.png", blur : "file:///sdcard/0/123.png", path : "/sdcard/0/la-danza-del-fuego.mp3" } ] 放在引号中,但他们没有,PHP帮助了他们。

  

2.为什么我收到错误使用未定义的常量周 - 调用函数时假设'周',以及我可以采取哪些步骤来纠正它?

因为代码中没有这样的常量。见答案1

  

3.为什么以下变量被声明为全局全局$ weekStats,$ playerTotals,$ possibleScoreTotal; ?

糟糕的编程习惯。这些变量应该传递给函数。

要在数组上使用字符串索引,请将索引放在引号

"week"

如果您已经定义了常量,则不需要引号

$array["greeting"]="hi";

但如果你继续尝试

  define("greeting",  "hi");
  echo greeting;

PHP会认为anotherGreeting是一个常量,它会尝试查找并发出警告,然后它会试着通过认为你的意思来帮助你 $array[anotherGreeting]="Test";

当您获得 未定义索引 错误时,它们意味着您正在尝试访问阵列中尚不存在的数组索引。

答案 1 :(得分:1)

问题

为什么他们在数组变量的循环中使用常量?

  • 嗯,在我们看到整个项目之前很难回答,但通常这是一个错字,他们必须通过引用来纠正这个问题。

为什么我收到错误使用未定义的常数周 - 假设&#39;周&#39;在调用函数时,我可以采取哪些步骤来纠正它?

  • 好吧,php解释器会将week之类的东西读作常量,如果某个常量在某个地方未定义,那么php会产生这个通知(它不是错误),为了解决这个问题你需要引用数组元素

为什么以下变量被声明为全局全局$ weekStats,$ playerTotals,$ possibleScoreTotal;吗

  • global变量用于赋予变量全局访问权限并使其超出变量范围规则 - 顺便说一句,顺便说一下,它是一个糟糕的编程实践,它是非 - 建议在OOP编程中特别使用。

答案 2 :(得分:0)

在函数

之前定义常量
    define('week','week');
    define('wins','wins');
    define('name','name');
    define('userName','userName');
    define('score','score');