Php 从SimpleXML对象中删除重复项

Php 从SimpleXML对象中删除重复项,php,simplexml,Php,Simplexml,我希望我能得到一些帮助,我正在挣扎的东西。我使用SimpleXML解析XML提要,但是,我正在尝试删除重复项 我做了很多研究,但似乎无法将其分类。我认为最好的方法应该是array_unique,但是,包含解析输出的变量$event似乎无法使用它 链接到脚本 我正在使用的代码。任何帮助都将不胜感激。我花了好几天时间试图解决这个问题 // Lets parse the data $entries = simplexml_load_file($data); if(count($entries)):

我希望我能得到一些帮助,我正在挣扎的东西。我使用SimpleXML解析XML提要,但是,我正在尝试删除重复项

我做了很多研究,但似乎无法将其分类。我认为最好的方法应该是array_unique,但是,包含解析输出的变量
$event
似乎无法使用它

链接到脚本

我正在使用的代码。任何帮助都将不胜感激。我花了好几天时间试图解决这个问题

// Lets parse the data
$entries = simplexml_load_file($data);
if(count($entries)):
    //Registering NameSpace
    $entries->registerXPathNamespace('prefix', 'http://www.w3.org/2005/Atom');
    $result = $entries->xpath("//prefix:entry");

    foreach ($result as $entry):
        $event = $entry->children("cap", true)->event;

        endforeach;
endif;

// Lets creat some styles for the list
    $legendStyle = "margin:10px auto 10px auto;";

$legend .= "<table style='$legendStyle' cellspacing='5px'>";
$legend .= "<tr>";

$i = 1;
foreach ($result as $entry) {
    $event = $entry->children("cap", true)->event;
//Set the alert colors for the legend
   include ('../inc-NWR-alert-colors.php');
   $spanStyle   = "background-color:{$alertColor};border:solid 1px #333;width:15px;height:10px;display:inline-block;'> </span><span style='font-size:12px;color:#555;";
    $legend .= "<td> <span style='$spanStyle'> $event</span></td>";
    if($i % 5 == 0)
        $legend .= "</tr><tr>";
    $i++;
}

$legend .= "</tr>";
$legend .= "</table>";


echo $legend;
//让我们分析数据
$entries=simplexml\u load\u文件($data);
如果(计数($entries)):
//注册命名空间
$entries->registerXPathNamespace('前缀','http://www.w3.org/2005/Atom');
$result=$entries->xpath(//前缀:entry”);
foreach($result作为$entry):
$event=$entry->children(“cap”,true)->event;
endforeach;
endif;
//让我们为列表创建一些样式
$legendStyle=“保证金:10px自动10px自动;”;
$legend.=“”;
$legend.=“”;
$i=1;
foreach($result作为$entry){
$event=$entry->children(“cap”,true)->event;
//设置图例的警告颜色
包括('../inc NWR alert colors.php');

$spanStyle=“background color:{$alertColor};边框:实心1px#333;宽度:15px;高度:10px;显示:inline block;”>下面的示例使用了代替SimpleXML的方法,因为DOM提供了方便的创建方法

创建规范XML的基本思想是,实际上完全相同的两个节点将具有相同的序列化输出,而不管它们在源文档中的表示形式如何

例如,属性顺序在元素上并不重要,因此:

<element foo="Foo" bar="Bar"/>`

输出:
处理此问题的一种方法是首先拥有一组唯一的值(通常包含在数组中),然后再演示。顺便问一下,你有一个xml链接示例吗?@ghost这是我用来测试你是否正确的提要,我同意。它似乎是在我打印它时出现的,但它是唯一的,因为它不是普通的xml,它使用了一个命名空间。我很难将它放入一个可以使用的数组中。@Texan78等一下,什么应该是正确的最终输出?你的PHP站点,有15个结果,对吗?正确的数字是多少?这很好,它工作得很好,我更喜欢这种方式,但现在我回到了原点,我的样式没有格式化。例如,在一个生成5列的表中,然后开始一个新行。
<element bar="Bar" foo="Foo"/>
<element bar="Bar" foo="Foo"></element>
$dom = new DOMDocument();
$dom->load("http://alerts.weather.gov/cap/ca.atom");

// Create an array of unique events
$events = [];
foreach ($dom->getElementsByTagNameNS("urn:oasis:names:tc:emergency:cap:1.1", "event") as $event) {
    $events[$event->C14N()] = $event;
}

// ... do whatever other stuff you need ...

// Output event text.
foreach ($events as $event) {
    echo "$event->nodeValue\n";
}
Coastal Flood Advisory
High Surf Advisory
Wind Advisory
Winter Weather Advisory
Beach Hazards Statement