【发布时间】:2011-02-01 10:33:57
【问题描述】:
我有一个数组,其中包含基于特定玩家的值,我想使用其中一些值(match_id 和分钟)与第二个数组进行比较,然后创建第三个数组来保存返回的值。
我正在为基于 Joomla 的网站编写此代码,因此我使用了内置数组函数 LoadRowList();它从查询返回的表记录中返回索引数组的索引数组。
第一个数组包含基于特定玩家填充的值
$search = array();
$query = "SELECT first_name,match_id,m_name,minutes,points
FROM #__bl_players as pl,#__bl_match_events as me,#__bl_matchday as md, #__bl_match as m
WHERE pl.id = me.player_id
AND pl.id = ".$player_id."
AND me.match_id = m.id
AND m.m_id = md.id
";
$db->setQuery($query);
$search = $db->loadRowList();
$search 数组以下面的格式输出一个数组。 print_r($搜索);
Array (
[0] => Array ( [0] => Marco [1] => 33 [2] => Xornada 04 [3] => 7 [4] => 3 )
[1] => Array ( [0] => Marco [1] => 129 [2] => Xornada 08 [3] => 1 [4] => 2 )
[2] => Array ( [0] => Marco [1] => 129 [2] => Xornada 08 [3] => 6 [4] => 2 )
)
第二个数组包含数百条与第一个布局相同的记录。
$data = array();
$query = "SELECT first_name,match_id, m_name,minutes,ecount
FROM #__bl_players as pl,#__bl_match_events as me,#__bl_matchday as md, #__bl_match as m
WHERE pl.id = me.player_id
AND me.match_id = m.id
AND m.m_id = md.id
AND md.s_id = ".$s_id."
";
$db->setQuery($query);
$data = $db->loadRowList();
$data 数组以与上述相同的格式输出。 print_r($data);
Array (
[0] => Array ( [0] => Pablo [1] => 8 [2] => Xornada 01 [3] => 2 [4] => 3 )
[1] => Array ( [0] => Juan Ramón [1] => 9 [2] => Xornada 01 [3] => 1 [4] => 0 )
[2] => Array ( [0] => Pedro [1] => 9 [2] => Xornada 01 [3] => 1 [4] => 3 )
)etc etc etc
最后,我需要用 $search 和 $data 数组之间的匹配记录填充第三个数组,这些记录仅基于 match_id 和分钟。
Array(
[0]=>Array ([1]=> PlayerName(from the first array)[2]=> MatchID[3]=> MatchName[4]=> TimePlayed[5]=> Score(from the first array)[6]=> Score(from the second array)[7]=> PlayerName(from the second array))
)etc etc etc
我已经修改了我的原始问题以包含更多信息我不是专家,所以我正在寻找所有和任何想法和反馈。谢谢
注意:列名区域遵循Name = first_name,Match ID = match_id,Match name = m_name,事件时间=分钟,得分=积分
我遇到的问题 为了回应 cmets 这是我的问题,以下面的代码为例(它只是一个例子):
$matches = array();
foreach ($data as $entry){
if ($entry[2] == $search[2]) {
match =$search;
$matches[] = $match
}
}
print_r($mtaches)
如果我使用 $entry[2] == $search[2] 之类的比较,它将比较每个 ie 的第二个数组
`[2] => Array ( [0] => Marco [1] => 129 [2] => Xornada 08 [3] => 6 [4] => 2 )
==
[2] => Array ( [0] => Pedro [1] => 9 [2] => Xornada 01 [3] => 1 [4] => 3 )`
所以我的问题是你如何使用一种通配符,以便我可以比较键值,即
$entry[*][2] == $search[*][2]
感谢大家的帮助和耐心,尤其感谢 @erisco 分享他的知识
【问题讨论】:
-
你需要
array_walk()或类似的东西来编写你自己的函数 - php.net/manual/en/function.array-walk.php -
我更喜欢遍历数组的自定义过程,而不是遍历。如果输入同时具有数字和字符串索引,则阅读起来不那么深奥,并且可能具有更高的容错性。
-
这个问题肯定可以通过更改查询来解决,但是您需要为所涉及的表提供确切的数据库结构。