我有以下代码生成数组。
我需要拆分该数组并将结果数组相互比较。
我只需按顺序比较彼此相邻的数组。
所以第一个和第二个,第二个和第三个,等等......我可以构建另一个数组来存储需要比较的顺序,如果有帮助的话。我只是不知道如何像这样检查它们。
目标是确保彼此两侧的数组不包含相同的$ racer_id
这是一个赛道的得分应用程序,一个赛车手不能在一个接一个的比赛中。
有人可以向我推进正确的方向吗?
**只有一个$ event_id,有多个$ class_id和$ racer_id。
<?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);
}
?>
数组:
Array
(
[17] => Array
(
[0] => Array
(
[racer_id] => 95
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
[1] => Array
(
[racer_id] => 350
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
[2] => Array
(
[racer_id] => 493
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
[3] => Array
(
[racer_id] => 295
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
[4] => Array
(
[racer_id] => 1142
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
[5] => Array
(
[racer_id] => 628
[event_id] => 326
[class_type] => A
[points_class] => 17
[moto_nbr] => 3
)
)
[14] => Array
(
[0] => Array
(
[racer_id] => 1142
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[1] => Array
(
[racer_id] => 162
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[2] => Array
(
[racer_id] => 151
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[3] => Array
(
[racer_id] => 1176
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[4] => Array
(
[racer_id] => 401
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[5] => Array
(
[racer_id] => 264
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[6] => Array
(
[racer_id] => 797
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[7] => Array
(
[racer_id] => 124
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[8] => Array
(
[racer_id] => 29
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[9] => Array
(
[racer_id] => 74
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[10] => Array
(
[racer_id] => 117
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[11] => Array
(
[racer_id] => 408
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[12] => Array
(
[racer_id] => 501
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
[13] => Array
(
[racer_id] => 1125
[event_id] => 326
[class_type] => A
[points_class] => 14
[moto_nbr] => 4
)
)
[8] => Array
(
[0] => Array
(
[racer_id] => 1180
[event_id] => 326
[class_type] => A
[points_class] => 8
[moto_nbr] => 6
)
)
[16] => Array
(
[0] => Array
(
[racer_id] => 73
[event_id] => 326
[class_type] => A
[points_class] => 16
[moto_nbr] => 12
)
[1] => Array
(
[racer_id] => 9
[event_id] => 326
[class_type] => A
[points_class] => 16
[moto_nbr] => 12
)
[2] => Array
(
[racer_id] => 525
[event_id] => 326
[class_type] => A
[points_class] => 16
[moto_nbr] => 12
)
)
[13] => Array
(
[0] => Array
(
[racer_id] => 1089
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[1] => Array
(
[racer_id] => 73
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[2] => Array
(
[racer_id] => 162
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[3] => Array
(
[racer_id] => 264
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[4] => Array
(
[racer_id] => 797
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[5] => Array
(
[racer_id] => 422
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[6] => Array
(
[racer_id] => 1176
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[7] => Array
(
[racer_id] => 76
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
[8] => Array
(
[racer_id] => 1136
[event_id] => 326
[class_type] => A
[points_class] => 13
[moto_nbr] => 15
)
)
[5] => Array
(
[0] => Array
(
[racer_id] => 600
[event_id] => 326
[class_type] => Y
[points_class] => 5
[moto_nbr] => 16
)
[1] => Array
(
[racer_id] => 1143
[event_id] => 326
[class_type] => Y
[points_class] => 5
[moto_nbr] => 16
)
)
[10] => Array
(
[0] => Array
(
[racer_id] => 421
[event_id] => 326
[class_type] => A
[points_class] => 10
[moto_nbr] => 19
)
[1] => Array
(
[racer_id] => 1219
[event_id] => 326
[class_type] => A
[points_class] => 10
[moto_nbr] => 19
)
)
)
答案 0 :(得分:3)
您可以通过将当前的racer id与数组中的下一个racer 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)
),
);
循环用于比较赛车ID&#39>
foreach($InputArray as $key => $val)
{
foreach($val as $k => $v)
{
$nextKey =$k+1;
if(array_key_exists($nextKey,$val))
{
if($v[0]==$val[$nextKey][0])
{
echo "Racer ID ".$v[0]." Mathced in Class ID : ".$key;
////sucess code here if same race id's are there...
}
}
}
}
?>
这将是O / P
Racer ID 493 Mathced in Class ID : 17
在$InputArray
racer id(493)中,索引2和3在类id 17中相同
<强> LIVE DEMO FOR THIS 强>
$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
)
)
)
在两个相邻的类中找到重复的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
}
}
}
}
<强> LIVE EXAMPLE 强>
答案 1 :(得分:2)
在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?'
}
}
}