2013-05-16 116 views
0

我有2個陣列,我想比較和更新得分,如果找到匹配:比較2個陣列具有不同長度的

One_array[0] = bla 
One_array[1] = blabla 
One_array[2] = blablabla 

Two_array[0] = bla 
Two_array[1] = blabla 

Score_array[0] = 10 
Score_array[1] = 15 
Score_array[2] = 1 

現在,這裏的做比較的PHP代碼:

$count = count($One_array); 
$Score = 0; //Initialize score 

for($i=0;$i<=$count;$i++){ 
    for($j=0;$j<=$count;$j++){ 
    if(isset($Two_array[$i]) == $One_array[$j]){ 
     $Score = $Score + $Score_array[$j]; 
    } 
    } 
} 

我得到以下錯誤:

Undefined offset: 2 On the line $Score = Score+$Score_array[$j];

請幫助,我也嘗試過使用isset在這一行上,它不起作用

+0

使用類似array_intersect _ *()函數的函數有什麼問題? –

回答

0

兩個循環需要不同的限制,因爲數組的大小不同。

$count1 = count($One_array); 
$count2 = count($Two_array); 
$Score = 0; //Initialize score 

for($i=0;$i<$count2;$i++) 
{ 
    for($j=0;$j<$count1;$j++) 
    { 
     if($Two_array[$i] == $One_array[$j]) 
      { 
       $Score = $Score + $Score_array[$j]; 
      } 
    } 
} 

有了這個,你不需要使用isset()

+0

嗨@Barmar,我試了這個代碼,但現在我得到了if語句上的偏移錯誤 – user1783675

+0

在循環條件下,<='應該是<<'。在兩個循環中你都會走得太遠。 – Barmar

0

那麼,錯誤是相當自我解釋。 $Score_array沒有設置索引2

執行數組的var_dump並查看輸出以確保它實際上包含您認爲它包含的內容。

0

你已經在$ i和附加$ J代碼犯了很多錯誤,走在他們更好看;)

順便說一句,你應該使用array_diff,而不是重新發明輪子的:)

0

使用此代碼:

$count = count($One_array); 
$Score = 0; //Initialize score 

for($i=0;$i<=$count;$i++) 
          { 
           for($j=0;$j<=$count;$j++) 
           { 
            if(isset($Two_array[$i]) && isset($One_array[$j]) && $Two_array[$i]==$One_array[$j]) 
             { 
              $Score = $Score + $Score_array[$j]; 
             } 
           } 
          } 

您的問題是,如果部分