Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于PHP脚本的帮助_Php_Foreach - Fatal编程技术网

关于PHP脚本的帮助

关于PHP脚本的帮助,php,foreach,Php,Foreach,我正在尝试为公告板脚本创建一个定制的奖牌/奖励系统 我遇到的问题是每10分钟运行一次的任务,以检查是否有资格获得奖牌 以下是我当前的代码: // select all medals from database $query = $db->simple_select("medals", "*", ""); $medals = $db->fetch_array($query); // select users $query_users = $db->simple_select("

我正在尝试为公告板脚本创建一个定制的奖牌/奖励系统

我遇到的问题是每10分钟运行一次的任务,以检查是否有资格获得奖牌

以下是我当前的代码:

// select all medals from database
$query = $db->simple_select("medals", "*", "");
$medals = $db->fetch_array($query);

// select users
$query_users = $db->simple_select("users", "*", "");
$results = $db->fetch_array($query_users);

foreach($medals as $medal)
{
    foreach($results as $result)
    {
        if($result['postnum'] >= $medal['postnum'])
        {
            $insert = array( 
                "mid" => $medals['id'],
                "muid" => $result['uid'],
                "mtime" => TIME_NOW,
            ); 

            $db->insert_query("users_medals", $insert);                 
        }
    }
}
上述代码的目的是查询
奖牌
表,该表包含所有有资格被用户“赢得”的奖牌。
users
表非常简单,它包含论坛板的用户。当用户满足奖牌要求时,奖牌将与奖牌id、用户id和奖牌授予时间一起插入
用户奖牌

但是,每次运行任务时,它都会插入30多行(我使用的测试板只有两个用户,因此它应该只插入一行,因为只有一个用户满足了至少有两个帖子的用户的奖牌要求)

有人能帮我吗

谢谢。

问题出在这里:

if($result['postnum'] >= $medal['postnum'])

在每个循环中输出
$result['postnum']
$medal['postnum']
的值,以检查它们的值。你会发现第一个值总是大于或等于第二个值,所以循环总是执行。

你能发布你从
var\u dump($aclements)
var\u dump($results)
得到的信息吗?我觉得你在比较aclements数据库中的每个postnum值和results数据库中的每个postnum值。你不想只比较一个和一个吗?比如,将第一行/列的成绩与第一行/列的奖牌进行比较,依此类推?我觉得如果你把每件事都与每件事进行比较,你肯定会对你的if声明得到多个真实的回应。我解决了这个问题。我使用了错误的变量…@Spencer:如果你觉得你的解决方案会对其他人有利,你能把它作为一个答案发布并标记为接受吗?否则,你可以结束这个问题。这是因为他使用$result和$COLDAME而不是$results和$COLDAMES吗?我注意到这些是值,而不是数组。有没有更好的方法写这个?除了多维数组之外,我从未在foreach循环中见过foreach循环。双foreach循环有效吗?@bozdoz:OP正确引用了变量。行
foreach($COAMLES as$COAMLED)
foreach($results as$result)
分别创建名为
$COAMLED
$result
的变量。循环的格式取决于他的数据结构,但在这种情况下看起来是可行的(如果没有优化的话)解决方案。但这将检查每个奖牌的每个结果,对吗?Foreach(奖牌为$奖牌)将贯穿每一枚奖牌,对于每一枚奖牌,它将调用Foreach(结果为$结果),它将贯穿每一个结果。我觉得只检查$results一次会更好:也许switch语句会更好:例如switch($result['postnum'])…case($result['postnum']>=200):…brown…case($result['postnum']>=500):…silver…等等。