您好我有一个代码可以检查xml文件中的重复项:
XML:
<?xml version="1.0"?>
<profielen>
<profiel>
<voornaam>a</voornaam>
<achternaam>a</achternaam>
<adres>a</adres>
<postcode>a</postcode>
<plaats>a</plaats>
<email>a</email>
</profiel>
<profiel>
<voornaam>b</voornaam>
<achternaam>b</achternaam>
<adres>b</adres>
<postcode>b</postcode>
<plaats>b</plaats>
<email>b</email>
</profiel>
<profiel>
<voornaam>c</voornaam>
<achternaam>c</achternaam>
<adres>c</adres>
<postcode>c</postcode>
<plaats>c</plaats>
<email>c</email>
</profiel>
<profiel>
<voornaam>c</voornaam>
<achternaam>c</achternaam>
<adres>c</adres>
<postcode>cL</postcode>
<plaats>c</plaats>
<email>c</email>
</profiel>
</profielen>
我可以选择6个复选框,选择的越多,它过滤的越多。如果我选择名字,只有a,b和名字c的第一个人可以留下,第二个人将被忽略。
现在我有了这段代码:
$xml = simplexml_load_file('/xampp/htdocs/UploadifyZWP/uploads/profiel.xml');
//Load the xml file into an array
$myArray = $_REQUEST['checkboxarray'];
//Contains the selected value (firstname = 0,lastname = 1 etc..)
if(count($myArray) <1){
//If $myArray is empty it means no checkboxes are selected and there will be no filtering
count($xml);
}else{
$fields = $myArray;
//If at least one field is selected, this code runs:
switch(count($myArray)){
case 1:
//One checkbox selected
//Array where the profiles go withouth duplicates
$profile = array();
$passed = 0;
$teller = 0;
//Loops through all the profiles in the xml array
while($passed < count($xml)){
$add = false;
//Checks for all the selected values, 1 checkbox is selected so only 0 (firstname) is selected and goes into $field
foreach($fields as $field){
if(count($profile) < 1){
//If profile is empty, add the first profile from the xml array
$add = true;
}else {
if($profile[$teller][$field] != $xml->profiel[$teller][$field])
{
$add = true;
break;
}else{
$teller++;
$passed++;
}
}
}
if($add = true){
//toevoegen
$profile[$teller] = $xml->profiel[$teller];
$teller++;
$passed++;
}
}
echo count($profile);
print_r($profile);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default: echo "error";
}
}
所以我将所有正确的配置文件放在$ profile数组中,重复将被忽略。现在进行测试我打印阵列配置文件,看看它是否做了它应该做的,但结果不是我想要的。第一个(a)将被添加到$ profile,第二个(b)将不会被添加,第三个(c)将被添加,第四个(c)将被添加($())。现在,如果我再添加2个配置文件(e,f),将添加e而f将不添加。现在我在安装调试器时遇到了麻烦,所以我看不出它出了什么问题。我也收到错误消息:
注意:未定义的偏移量: C:\ xampp \ htdocs \ UploadifyZWP \ ontdubbelen.php 在 37 行<1>
和
注意:未定义的偏移量: C中的3:C:\ xampp \ htdocs \ UploadifyZWP \ ontdubbelen.php 37
有没有人知道哪里出错了?为什么?
答案 0 :(得分:0)
在这一行if($profile[$teller][$field] != $xml->profiel[$teller][$field])
上,您指定了多维数组的第三级,但您的数据只有2个级别,如下所示。
SimpleXMLElement Object
(
[voornaam] => a
[achternaam] => a
[adres] => a
[postcode] => a
[plaats] => a
[email] => a
)
试试这个
if($profile[$teller] != $xml->profiel[$teller])
答案 1 :(得分:0)
此代码存在一些问题,但主要问题是其中的一些逻辑存在缺陷。
我首先要说if语句if($add = true)
将始终返回true,因为您分配而不是比较。您需要使用if ($add == true)
进行比较。
除此之外,很难确切地说出你做错了什么,因为它是逻辑上的普遍失败。主要问题归结为,在while循环的第二次迭代(开始while($passed < count($xml))
)中,$profile
数组在索引0处包含一个元素,(意味着count($profile) < 1
返回false
,但$teller
的值现在为1
,因为您在第一次迭代中将其递增。然后您尝试比较失败的$profile[$teller][$field]
的值,因为您的1
数组中没有$profile
的偏移量。
修改强>
要检查数组中是否存在索引,可以使用isset
,例如
if (isset($profile[$teller]))