2016-08-12 73 views
0

我有一个XML文件,我需要循环并检查字符串匹配。不知道为什么下面的代码不起作用,即不返回“真”。PHP加载XML并检查匹配

XML

<AUTHORIZED> 
<USER>janedoe</USER> 
<USER>sallysmith</USER> 
<USER>walterwilliams</USER> 
<USER>jennyjones</USER> 
</AUTHORIZED> 

PHP

<?php 

    $user = 'janedoe'; 

    //Load xml file 
    if (file_exists('users.xml')) { 
     $authUsers = simplexml_load_file('users.xml'); 
    } else { 
     echo 'Could not find list of authorized users!'; 
    } 

    //Check for approved user 
    if(in_array($user, $authUsers)){ 
     $approvedUser = 'true'; 
    } else { 
     $approvedUser = 'false'; 
    } 

    echo $approvedUser; 

?> 
+0

请做一个'var_dump'上'$ approvedUser'。我不认为它的结构像你认为的那样。 –

+0

'var_dump($ approvedUser)'yield:'string(5)“false”' – PixelPaul

回答

2

simplexml_load_file返回SimpleXMLElement而不是Array,所以你不能使用in_array功能来做到这一点的功能。

可以做的,就是以价值,如果$authUsers->USER(这也是一个SimpleXMLElement),将其转换为数组,然后检查:

$str = "<AUTHORIZED> 
<USER>janedoe</USER> 
<USER>sallysmith</USER> 
<USER>walterwilliams</USER> 
<USER>jennyjones</USER> 
</AUTHORIZED>"; 


$user = 'janedoe'; 

$authUsers = simplexml_load_string($str); 
var_dump((array) $authUsers->USER); 

//Check for approved user 
if(in_array($user, (array) $authUsers->USER)){ 
    $approvedUser = 'true'; 
} else { 
    $approvedUser = 'false'; 
} 
+0

谢谢,这做了我所需要的。 – PixelPaul

+0

不客气。对答案的投票也将不胜感激:) – Dekel

+0

对不起。完成:) – PixelPaul