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? 
    } 
}  
4

2 回答 2

0

那是因为这正是你告诉它要做的事情。您当前正在将每个结果写入$parseResult- 并覆盖过程中的最后一个结果 - 在您检查它是否正确之前。您还在循环return内进行调用(以及检查)foreach,这实际上会在第一次迭代后终止循环。你想要的可能更像这样:

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 
} 
于 2012-08-01T19:51:03.593 回答
0

您的return陈述在foreach块内。基本上,foreach循环将运行一次并parseResult尽快输出$parseResult['yob'] == $yob。我想你可能在检查 duplicate 之前忘记了右括号yobs。希望这可以帮助。

于 2012-08-01T19:52:00.733 回答