匹配数组的结果

时间:2012-08-01 19:43:08

标签: php

所有

试图解决这个问题一段时间没有任何进展......任何反馈都非常受欢迎。

我们根据用户来电显示和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? 
    } 
}  

2 个答案:

答案 0 :(得分: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 
} 

答案 1 :(得分:0)

您的return声明位于foreach块内。基本上,foreach循环将运行一次,并在parseResult后立即输出$parseResult['yob'] == $yob。我想你可能在检查重复yobs之前忘记了一个结束括号。希望这会有所帮助。