PHP循环数组并对数组项运行函数

PHP循环数组并对数组项运行函数,php,arrays,for-loop,foreach,while-loop,Php,Arrays,For Loop,Foreach,While Loop,我似乎有过几次遇到这个问题,都想明白了,但下一次遇到它,我就想不出来了 所以我有一个SQL语句,它像往常一样返回$result变量 $result = $stmt->fetchAll( PDO::FETCH_ASSOC ); 我会在下面给你看一个精简的回报 Array ( [eid] => 1 [eTitle] => premier league [eDesc] => [cid] => 1 [deleted] => 0 [eStartTi

我似乎有过几次遇到这个问题,都想明白了,但下一次遇到它,我就想不出来了

所以我有一个SQL语句,它像往常一样返回$result变量

$result = $stmt->fetchAll( PDO::FETCH_ASSOC );
我会在下面给你看一个精简的回报

Array ( [eid] => 1 [eTitle] => premier league [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-20 ) Array ( [eid] => 2 [eTitle] => fa cup [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-27 ) 所以基本上我想用主场或客场的球队数据重建阵列,这些数据使用eHome和eAway中给出的id

我应该这样做还是应该在MySQL中使用连接

对不起,如果我说得这么糟糕,我已经为此挣扎了几个小时,然后放弃了

提前谢谢各位


汤姆

这就是我在最后用到的,伙计们,很抱歉这个措辞拙劣的问题。有没有更好的方法可以做到这一点,这里是代码,然后是print_r()转储文件,让您看看我是怎么做的

$stmt = $this->conn->prepare('
  SELECT * from events WHERE cid = :cid
');

$stmt->bindParam( ':cid', $categoryid, PDO::PARAM_INT );

if( $stmt->execute() )
{
    $result = $stmt->fetchAll( PDO::FETCH_ASSOC );

    $resultCount = count($result);

    for( $i = 0; $i < $resultCount; $i++ ) {

        $result[$i]['homeTeamData'] = $this->getTeam( $result[$i]['eHome'] );
        $result[$i]['awayTeamData'] = $this->getTeam( $result[$i]['eAway'] );
    }
}
$stmt=$this->conn->prepare('
从cid=:cid的事件中选择*
');
$stmt->bindParam(':cid',$categoryid,PDO::PARAM_INT);
如果($stmt->execute())
{
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
$resultCount=计数($result);
对于($i=0;$i<$resultCount;$i++){
$result[$i]['homeTeamData']=$this->getTeam($result[$i]['eHome']);
$result[$i]['awayTeamData']=$this->getTeam($result[$i]['eAway']);
}
}
下面是print_r(),它添加了额外的awayTeamData和homeTeamData,其中包含在上面添加的循环中收集的数据

Array ( [0] => Array ( [eid] => 1 [eTitle] => premier league [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-20 [homeTeamData] => Array ( [tid] => 1 [tName] => Chelsea [deleted] => 0 ) [awayTeamData] => Array ( [tid] => 2 [tName] => Man Utd [deleted] => 0 ) ) [1] => Array ( [eid] => 2 [eTitle] => fa cup [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-27 [homeTeamData] => Array ( [tid] => 1 [tName] => Chelsea [deleted] => 0 ) [awayTeamData] => Array ( [tid] => 2 [tName] => Man Utd [deleted] => 0 ) ) ) 排列 ( [0]=>阵列 ( [eid]=>1 [eTitle]=>英超联赛 [eDesc]=> [cid]=>1 [已删除]=>0 [eStartTime]=>15:00 [eHome]=>1 [eAway]=>2 [eKickoff]=>15:00:00 [eDate]=>2016-08-20 [homeTeamData]=>阵列 ( [tid]=>1 [tName]=>切尔西 [已删除]=>0 ) [awayTeamData]=>阵列 ( [tid]=>2 [tName]=>曼恩Utd [已删除]=>0 ) ) [1] =>阵列 ( [eid]=>2 [eTitle]=>足总杯 [eDesc]=> [cid]=>1 [已删除]=>0 [eStartTime]=>15:00 [eHome]=>1 [eAway]=>2 [eKickoff]=>15:00:00 [eDate]=>2016-08-27 [homeTeamData]=>阵列 ( [tid]=>1 [tName]=>切尔西 [已删除]=>0 ) [awayTeamData]=>阵列 ( [tid]=>2 [tName]=>曼恩Utd [已删除]=>0 ) ) )
如果
$this->getTeam
是另一个查询,那么您可能应该使用连接。循环中的查询或基于另一个查询结果的查询几乎总是意味着数据库\代码结构不良。但实际上,根据提供的信息,这是不可能回答的,因此您还想在之后删除eAway键?我认为没有足够的信息说明您最初从何处获得了哪些数据以及所需的输出是什么(以及为什么)。结果数据集与您已有的数据集差别不大。。。它只是合并到一个子数组中。如果我试着提前思考:我假设
getTeam(id)
提供来自特定团队的所有数据。因此,我将运行一个查询,以获取第一次查询中涉及的所有团队数据(
“…其中团队id位于(1,2,3,4,)”
)中,并将其存储到一个id为a键的数组中。对于这些混乱的问题,伙计们,我$this->getTeam($id)查询数据库并返回某个事件的团队名称和数据。在曼恩utd vs切尔西的比赛中,第一个查询返回两个队id的比赛,然后是函数getTeam我想要每个队的数据,而不仅仅是在我们目前使用的事件函数中设置的id。getTeam是一个查询数据库的函数,在这种情况下返回[homeTeamData]和[awayTeamData]但是如果没有提供$tid,该函数可以返回数据库中的所有团队,但是如果提供了id,则只返回一个团队。你最好编辑你的问题,而不是给出答案。还可以提供函数“getTeam”。你仍然可以使用Join来完成此操作。谢谢jeff,我将在早上编辑我的脑袋有点炸了从今天开始,但我会编辑它,看看你或其他人是否可以改进我的答案,一个连接可能更适合这一点,dagon说,以及。我将编辑与2表结构时,我起床。感谢与我今天的轴承。 Array ( [0] => Array ( [eid] => 1 [eTitle] => premier league [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-20 [homeTeamData] => Array ( [tid] => 1 [tName] => Chelsea [deleted] => 0 ) [awayTeamData] => Array ( [tid] => 2 [tName] => Man Utd [deleted] => 0 ) ) [1] => Array ( [eid] => 2 [eTitle] => fa cup [eDesc] => [cid] => 1 [deleted] => 0 [eStartTime] => 15:00 [eHome] => 1 [eAway] => 2 [eKickoff] => 15:00:00 [eDate] => 2016-08-27 [homeTeamData] => Array ( [tid] => 1 [tName] => Chelsea [deleted] => 0 ) [awayTeamData] => Array ( [tid] => 2 [tName] => Man Utd [deleted] => 0 ) ) )