2012-08-01 43 views
0

所有,從一個數組

一直在努力解決這個問題有一段時間沒有任何進展匹配的結果...任何反饋是更受歡迎。

我們使用基於用戶呼叫者ID和YoB的簡單認證 - 如果他有獨特的YoB,他可以訪問該服務,如果該呼叫者ID下有另一個用戶與YoB相同:他會收到一條消息,需要。

函數的目標是返回一個匹配用戶的記錄 - 此刻它總是返回最後一條記錄。

PHP代碼:

// $response -> XML record with firstName, lastName and dob (dd/mm/yyyy) 
// $yob -> YoB user has entered for authentication 

function parseResponseYOB($response, $yob) 
{ 
    $duplicates = 0; // If there are users with same YoB, display message that additional info is required 

    if(empty($response->CallerMembers->CallerMemberDetails->dob)) 
    { 
     $iterateArr = $response->CallerMembers->CallerMemberDetails; 
    }else{ 
     $iterateArr[] = $response->CallerMembers->CallerMemberDetails; 
    } 

    foreach($iterateArr as $result) 
    { 
     $parseResult['firstName'] = $result->firstName; 
     $parseResult['lastName'] = $result->lastName; 
     $parseResult['yob'] = substr($result->dob, -4); 

     if($parseResult['yob'] == $yob) 
     { 
      $duplicates++; 
     }else{ 
      continue; 
     } 
    } 
// Check for duplicate YoBs 

    if($duplicates > 1) 
    { 
     return "Multiple members with the same YOB"; 
    }elseif($duplicates < 1){ 
     return "No members with the specified YOB found"; 
    }  

    return $parseResult; // No duplicates, return the record of the matching user 
    // PROBLEM: Always the last record is returned... not the one with matching YOB? 
    } 
} 
+0

歡迎來到Stack Overflow! – 2012-08-01 19:44:19

回答

0

這是因爲這正是你告訴它做的事。您目前正在將每個結果寫入$parseResult - 並在覆蓋過程中的最後一個結果之前 - 甚至檢查它是否正確。您還在foreach循環內調用return調用(以及檢查),這將在第一次迭代後實際終止循環。你想要的是可能更是這樣的:

function something ($arg1, $arg2) { 
$parseResult; 
//... 
foreach ($iterateArr as $result) { 
    if (substr($result->dob, -4) == $yob) { 
     $parseResult['firstName'] = $result->firstName; 
     $parseResult['lastName'] = $result->lastName; 
     $parseResult['yob'] = substr($result->dob, -4); 
     $duplicates++; 
    } 
} 
// Check for duplicate YoBs 

if($duplicates > 1) 
{ 
    return "Multiple members with the same YOB"; 
}elseif($duplicates < 1){ 
    return "No members with the specified YOB found"; 
}  

return $parseResult; // No duplicates, return the record of the matching user 
} 
+0

非常感謝鈀金,這是訣竅! – Igor 2012-08-01 23:05:07

0

return語句是foreach塊內。基本上,foreach循環將運行一次,並立即輸出parseResult$parseResult['yob'] == $yob。我想你可能在檢查重複的yobs之前忘記了一個大括號。希望這可以幫助。