PHP foreach循环问题

时间:2011-02-18 05:14:21

标签: php sql arrays

我有以下代码:

//generate 10 top tags
$tagSQL = mysql_fetch_array(mysql_query("SELECT * FROM tags"));
$topArray = array();
foreach($tagSQL as $poland)
{
    if($poland["tagID"] == 1)
    {
        $topArray[0] ++;
    }
    if($poland["tagID"] == 2)
    {
        $topArray[1] ++;
    }
    if($poland["tagID"] == 3)
    {
        $topArray[2] ++;
    }
    if($poland["tagID"] == 4)
    {
        $topArray[3] ++;
    }
}
function printTopTags()
{
    $n = 0;
    foreach($topArray as $buddha)
    {
        $n = $n + 1;
        if(sizeOf($topArray) > $n)
        {
            $hersheyBar = " ";
        }
        else
        {
            $hersheyBar = "";
        }
        $finalFinalEndArray = mysql_fetch_array(mysql_query("SELECT tagName FROM tags WHERE tagID = '$buddha'"));
        foreach($finalFinalEndArray as $waterBottle)
        {
            echo $waterBottle . $hersheyBar;
        }
    }   
}

我收到错误Warning: Invalid argument supplied for foreach() on line 93

第93行是foreach($topArray as $buddha)

任何帮助?

4 个答案:

答案 0 :(得分:1)

http://ru.php.net/manual/en/language.variables.scope.php

另外

if($poland["tagID"] == 1)
{
    $topArray[0] ++;
}
if($poland["tagID"] == 2)
{
    $topArray[1] ++;
}
if($poland["tagID"] == 3)
{
    $topArray[2] ++;
}
if($poland["tagID"] == 4)
{
    $topArray[3] ++;
}

===

if ($poland["tagID"] >= 1 && $poland["tagID"] <= 4)
    $topArray[$poland["tagID"] - 1]++;

答案 1 :(得分:0)

$tagSQL = mysql_fetch_array(mysql_query("SELECT * FROM tags"));

这是非常糟糕的做法。如果查询由于任何原因而失败,则mysql_query返回boolean FALSE,然后你盲目地传递给mysql_fetch_array,然后它将依次失败,因为它期望一个mysql结果句柄,而不是一个布尔值,并返回一个布尔本身。

然后在foreach循环中使用所有这些失败的数据,并想知道为什么除了错误之外你没有得到任何东西?

答案 2 :(得分:0)

看起来$ topArray只是没有在printTopTags()函数中定义。 您可以将其作为参数传递:

function printTopTags($topArray) {
...
}

答案 3 :(得分:-1)

$ topArray是一个全局变量。

要在函数中使用它,您必须将其作为参数传递或使用global关键字将其导入:

function printTopTags()
{
    global $topArray;  // <---- Here!
    $n = 0;
    foreach($topArray as $buddha)