我试图与XML文件进行比较。我已将new.xml拆开并将所有条形码放入数组中。然后我尝试遍历old.xml文件并测试数组中是否存在条形码。如果条形码确实存在,那么我想回显一个表行。当我开始工作的时候,我会将它翻转打印出来!存在。 XML文件的结构如下:
<Products>
<Product>
<Id>2209</Id>
<Barcode>4890888123702</Barcode>
</Product>
</products>
我的HTML和PHP看起来像这样:
<html>
<head>
<title>Feeds = $$$$</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<?php
//Get the old XML file
if (file_exists('old.xml')) {
$oldxml = simplexml_load_file('old.xml');
//Load all the old product IDs into an array
$oldproducts = array();
foreach($oldxml->Product as $oldproduct){
$oldproducts[] = $oldproduct->Id;
}
}else{
echo "Old XML does not exist";
}
//Get the new xml file
if (file_exists('new.xml')){
$newxml = simplexml_load_file('new.xml');
//Load all the new product IDs into an array
$newproducts = array();
foreach ($newxml->Product as $newproduct){
$newproducts[] = $newproduct->Id;
}
}else{
echo "New XML file does not exist";
}
?>
<div class="table-responsive">
<table class="table table-striped">
<?php
foreach($oldxml->Product as $oldproduct) {
$x = $oldproduct->Id;
if(in_array($x, $newproducts)){
echo '<tr>';
echo '<td>' . $x . ' has been taken out of stock' . '</td>';
echo '</tr>';
}
}
?>
</table>
</div>
</div>
</body>
</html>
循环没有返回任何东西。如果我使用硬编码条形码而不是$ x,它会找到它并正常工作。
答案 0 :(得分:1)
当您使用SimpleXML时,您可能需要在将数据添加到数组并执行比较时输入您的ID。
例如,添加(int)
可能会有所帮助:
foreach ($newxml->Product as $newproduct){
$newproducts[] = (int) $newproduct->Id;
}
以及这里:
$x = (int) $oldproduct->Id;
为了进一步澄清这个答案,$newproduct->Id
在执行比较时仍然是一个SimpleXMLElement,在这个阶段,当你将它转换为INT时,很可能XML结构中可能存在多个ID元素它将采用第一个ID元素的文本节点,并在转换为整数时使用它。
当您回显$newproduct->Id
时,它会执行__tostring()
转换,因为上下文已知。在比较中使用它时不知道上下文。
答案 1 :(得分:-1)
请更正您的xml文件格式错误并使用此更改您的条件:
if (in_array($x, (array)$newproducts[0])) {
echo '<tr>';
echo '<td>' . $x . ' has been taken out of stock' . '</td>';
echo '</tr>';
}
希望这会对你有所帮助。