Php 比较相同值的多个数组
我有以下生成数组的代码 我需要将该数组拆分,并将生成的数组相互比较 我只需要按顺序比较相邻的阵列 所以第一和第二,第二和第三,依此类推。。我可以构建另一个数组来存储需要比较的顺序(如果有帮助的话)。我只是不知道如何像这样检查它们 目标是确保彼此两侧的数组不包含相同的$racer\u id 这是一个用于一条赛道的计分应用程序,一个参赛者不能参加一个接一个的比赛 有人能帮我往正确的方向推吗 **只有一个$event\u id,有多个$class\u id和$racer\u idPhp 比较相同值的多个数组,php,mysql,arrays,loops,matching,Php,Mysql,Arrays,Loops,Matching,我有以下生成数组的代码 我需要将该数组拆分,并将生成的数组相互比较 我只需要按顺序比较相邻的阵列 所以第一和第二,第二和第三,依此类推。。我可以构建另一个数组来存储需要比较的顺序(如果有帮助的话)。我只是不知道如何像这样检查它们 目标是确保彼此两侧的数组不包含相同的$racer\u id 这是一个用于一条赛道的计分应用程序,一个参赛者不能参加一个接一个的比赛 有人能帮我往正确的方向推吗 **只有一个$event\u id,有多个$class\u id和$racer\u id <?php f
<?php
function getEventClasses()
{
global $db;
global $event_id;
try {
$getEventClasses = $db->prepare('SELECT class_id
FROM tbl_event_classes
WHERE event_id = :event_id
ORDER BY sort');
$getEventClasses->bindValue(':event_id', $event_id);
$getEventClasses->execute();
} catch (PDOException $ex) {
echo 'An Error occurred!<br>';
//user friendly message
$ex->getMessage();
echo $ex;
exit;
}
$eventClasses = [];
while ($r = $getEventClasses->fetch(PDO::FETCH_ASSOC)) {
$eventClasses[] = [
'class_id' => $r['class_id']
];
}
return $eventClasses;
}
function getEntries($class_id)
{
global $db;
global $event_id;
try {
$getEntries = $db->prepare('SELECT tbl_event_entries.racer_id,
tbl_event_entries.class_id,
tbl_event_entries.event_id,
tbl_event_classes.class_type,
tbl_event_classes.points_class,
tbl_moto_order.moto_nbr
FROM tbl_moto_order
INNER JOIN (tbl_event_entries
LEFT JOIN tbl_event_classes
ON (tbl_event_entries.event_id = tbl_event_classes.event_id)
AND (tbl_event_entries.class_id = tbl_event_classes.class_id))
ON (tbl_moto_order.class_id = tbl_event_entries.class_id)
AND (tbl_moto_order.event_id = tbl_event_entries.event_id)
WHERE tbl_event_entries.event_id = :event_id
AND tbl_event_entries.racer_id != "9999"
AND tbl_event_entries.class_id = :class_id');
$getEntries->bindValue(':event_id', $event_id);
$getEntries->bindValue(':class_id', $class_id);
$getEntries->execute();
} catch (PDOException $ex) {
echo 'An Error occurred!<br>';
//user friendly message
$ex->getMessage();
echo $ex;
exit;
}
$eventEntries = [];
while ($r = $getEntries->fetch(PDO::FETCH_ASSOC)) {
$eventEntries[] = [
'racer_id' => $r['racer_id'],
'class_id' => $r['class_id'],
'event_id' => $r['event_id'],
'class_type' => $r['class_type'],
'points_class' => $r['points_class'],
'moto_nbr' => $r['moto_nbr']
];
}
return $eventEntries;
}
$eventClasses = getEventClasses();
foreach ($eventClasses as $eventClass) {
$eventEntries = getEntries($eventClass['class_id']);
foreach ($eventEntries as $eventEntry) {
$runningClasses[$eventClass['class_id']][] = [
'racer_id' => $eventEntry['racer_id'],
'event_id' => $eventEntry['event_id'],
'class_type' => $eventEntry['class_type'],
'points_class' => $eventEntry['points_class'],
'moto_nbr' => $eventEntry['moto_nbr']
];
}
}
foreach ($runningClasses as $class) {
$f->printr($class);
}
?>
在PHP中不确定。但是像这样的
for i = 0 to $eventClasses.count - 1
{
$event = $eventClasses[i];
for j = 0 to $event.count -2 // last race doesnt compare with next
{
$currentEvent = $event[j]
$nextEvent = $event[j+1];
if ($currentEvent[0] == $nextEvent[0] )
{
echo 'Same driver on next race?'
}
}
}
第一个答案
您可以通过将当前参赛者id与阵列中的下一个参赛者id进行比较来实现此目的
<?php
$InputArray = array(
17=>array(
0=>array(0=>95,1=>2 ),
1=>array(0=>350,1=>3),
2=>array(0=>493,1=>4),
3=>array(0=>493,1=>4)
),
18=>array(
0=>array(0=>56,1=>2 ),
1=>array(0=>89,1=>3),
2=>array(0=>52,1=>4)
),
);
这将是O/p
Racer ID 493 Mathced in Class ID : 17
在$InputArray
中,索引2和3处的赛车手id(493)在类别id 17中是相同的
修正答案
数组看起来像:
Array
(
[17] => Array
(
[0] => Array
(
[racer_id] => 95
[event_id] => 326
)
[1] => Array
(
[racer_id] => 350
[event_id] => 326
)
[2] => Array
(
[racer_id] => 493
[event_id] => 326
)
[3] => Array
(
[racer_id] => 1142
[event_id] => 326
)
)
[14] => Array
(
[0] => Array
(
[racer_id] => 1142
[event_id] => 326
)
[1] => Array
(
[racer_id] => 162
[event_id] => 326
)
[2] => Array
(
[racer_id] => 151
[event_id] => 326
)
)
)
在两个相邻的类中查找重复的Id
$keys = array_keys($InputArray);///this will give you an array of all the class id's 17,14,8...
foreach($InputArray as $key => $val)
{
$racer_ids = array_map(function ($ar) {return $ar['racer_id'];}, $val);///get all the racers from current class
$currentKey = array_search($key,$keys); ///get the key for current class in keys array
if(array_key_exists($currentKey+1 ,$keys)) //check if next key exist in keys array (key for 14)
{
$nextKey = $keys[$currentKey+1]; /// value present at next key in keys array 14 is the next key
if(array_key_exists($nextKey,$InputArray)) ///check if next key present in $InputArray
{
$next_racer_ids = array_map(function ($ar) {return $ar['racer_id'];}, $InputArray[$nextKey]);///get all the racers from next class
$result = array_intersect($next_racer_ids,$racer_ids);///compare racer ids from both array's
if(!empty($result)) ////return empty if racer_id is not same
{
echo "SAME DRIVER";
//your success code here
}
}
}
}
你能详细说明下一条赛道旁边的赛道是什么吗?您好,@indymx您想比较一个级别id中的车手id吗。例如,一级id 17有4个子条目,所以你想将这四个相互比较,以此类推,以获得下一个等级id…?Juan a赛道是一个用于摩托车比赛的设施。Manjeet。我只关心比较当前“类”的“class_id”数组和后面的那个数组。我将添加一个“排序”字段,如果测试中存在重复的“racer_id”,则需要更改该字段。不确定是否必须将一个事件的最后一场比赛与下一个事件的第一场比赛进行比较。如果有机会,我将稍后尝试此操作。这很接近,但分析数组的深度不够。您的阵列缺少一个级别。如何??正如您可以在类id 17中看到的那样,
array\u key\u exists()
三次为true,它比较了赛车手id 0-1、1-2和2-3@indymx,现在看一下代码,我的数据集和你的相似。。。以前我使用索引'racer_id',但是在你的数组中你没有使用任何索引,所以这就是为什么它令人困惑的原因…@indymx现在看看我的代码,试试这个,我想这就是你想要的,。。
$InputArray = array(
17=>array(
0=>array('racer_id'=>95,'event_id'=>326 ),
1=>array('racer_id'=>350,'event_id'=>326),
2=>array('racer_id'=>493,'event_id'=>326),
3=>array('racer_id'=>1142,'event_id'=>326)
),
14=>array(
0=>array('racer_id'=>1142,'event_id'=>326),
1=>array('racer_id'=>162,'event_id'=>326),
2=>array('racer_id'=>151,'event_id'=>326)
),
);
Array
(
[17] => Array
(
[0] => Array
(
[racer_id] => 95
[event_id] => 326
)
[1] => Array
(
[racer_id] => 350
[event_id] => 326
)
[2] => Array
(
[racer_id] => 493
[event_id] => 326
)
[3] => Array
(
[racer_id] => 1142
[event_id] => 326
)
)
[14] => Array
(
[0] => Array
(
[racer_id] => 1142
[event_id] => 326
)
[1] => Array
(
[racer_id] => 162
[event_id] => 326
)
[2] => Array
(
[racer_id] => 151
[event_id] => 326
)
)
)
$keys = array_keys($InputArray);///this will give you an array of all the class id's 17,14,8...
foreach($InputArray as $key => $val)
{
$racer_ids = array_map(function ($ar) {return $ar['racer_id'];}, $val);///get all the racers from current class
$currentKey = array_search($key,$keys); ///get the key for current class in keys array
if(array_key_exists($currentKey+1 ,$keys)) //check if next key exist in keys array (key for 14)
{
$nextKey = $keys[$currentKey+1]; /// value present at next key in keys array 14 is the next key
if(array_key_exists($nextKey,$InputArray)) ///check if next key present in $InputArray
{
$next_racer_ids = array_map(function ($ar) {return $ar['racer_id'];}, $InputArray[$nextKey]);///get all the racers from next class
$result = array_intersect($next_racer_ids,$racer_ids);///compare racer ids from both array's
if(!empty($result)) ////return empty if racer_id is not same
{
echo "SAME DRIVER";
//your success code here
}
}
}
}