2011-09-22 89 views
0

嘿,我有一組結果從數據庫返回,他們是代表1 - 18這是drivers_id的數字,它可以返回任何數量的那些取決於多少司機從種族退休。然後,我將它們匹配到用戶驅動程序,如果它們匹配,則用戶點數爲-10點。PHP循環系統的幫助

如果它們不匹配,則返回+5點。如果查詢根本沒有返回任何設置,那麼我知道用戶四個驅動程序每個都可以是+5點,但是如果它返回5個行,那我該如何循環並匹配它們呢?如果沒有匹配,則將+5點添加到該驅動程序變量,但必須在比較所有結果集之後進行比較,因爲該驅動程序可能與$ row中的下一行匹配。非常感謝您提供的任何幫助!

P.S在結果集中的每一driver_id是唯一的,所以一旦一個比較 是真的那麼driver_id不會再次出現。

$results = mysql_query("SELECT drivers_id FROM results_retired WHERE drivers_id IN ('$driver1', '$driver2', '$driver3', '$driver4') AND track_id = '$track'") or die ("Failed to update" . mysql_error()); 

$retireddrivers = mysql_fetch_array($results) 

if(in_array($driver1, $retireddrivers)){ 
    $driveronepoints -= $driver_points_system["retired"]; 
} 
else { 
    $driveronepoints += $driver_points_system["completion"]; 
} 
if(in_array($driver2, $retireddrivers)) { 
    $drivertwopoints -= $driver_points_system["retired"]; 
} 
else { 
    $drivertwopoints += $driver_points_system["completion"]; 
} 
if(in_array($driver3, $retireddrivers)) { 
    $driverthreepoints -= $driver_points_system["retired"]; 
} 
else { 
    $driverthreepoints += $driver_points_system["completion"]; 
} 
if(in_array($driver4, $retireddrivers)) { 
    $driverfourpoints -= $driver_points_system["retired"]; 
} 
else { 
    $driverfourpoints += $driver_points_system["completion"]; 
} 

我已經做了一些改動,現在的代碼,是in_array功能確定在這種情況下使用?

感謝

+0

你可以在數組函數中使用類似上面的變量名來比較數組的內容。 – Lee

+0

你能告訴我們$ driver1,$ driver2等等來自哪裏嗎? –

+0

有什麼問題? –

回答

1

它看起來像你缺少的行VS列的概念。

mysql_fetch_*會返回一行 - 即一個的退休司機ID - 每次調用。您需要將它們收集到一個數組中,然後才能使用in_array

while ($retired_driver = mysql_fetch_array($results)) 
{ 
    $retireddrivers[] = $retired_driver['driver_id']; 
} 

另外,如果你可以管理它,我會考慮把驅動程序1-4放入一個數組中。那麼你可以像

// Ideally, $driver[1-4]* won't exist at all -- you'd pull the info from the DB, 
// or from the form, and stuff it directly into the array. 
// This code right here is just to make existing code work 
$drivers = array(
    array('id' => $driver1, 'points' => &$driver1points), 
    array('id' => $driver2, 'points' => &$driver2points), 
    array('id' => $driver3, 'points' => &$driver3points), 
    array('id' => $driver4, 'points' => &$driver4points), 
); 

foreach ($drivers as $driver) 
{ 
    if (in_array($driver['id'], $retireddrivers)) 
    { 
     $driver['points'] -= $driver_points_system['retired']; 
    } 
    else 
    { 
     $driver['points'] += $driver_points_system['completion']; 
    } 
} 

大大減少重複的代碼。

+0

非常感謝!我剛剛遇到了如何通過優化代碼進行有效循環的問題。這給了我一個有用的見解!再次感謝。那麼現在每個$驅動程序和每個驅動程序ID的點是在一個數組內? – Lee

+0

是的,駕駛員的身份證和積分是綁在一起的。 '$ drivers [0] ['id']'是第一個驅動的ID,'$ drivers [0] ['points']'是他們的分數。如果你想要清理東西,那麼這些數組將成爲一個Driver類的很好的候選者,但是現在陣列工作得很好。 – cHao