在PHP中合并两个RSS源

时间:2016-02-03 08:07:51

标签: php xml rss

我使用以下代码在PHP中提取RSS源。

$var = (array) simplexml_load_file($rssfeed);

一切都很好。我能够遍历RSS提要并在我想要做的$ var中对RSS提要进行所有处理。问题是我希望能够将两个RSS源合并在一起。

所以我使用相同的代码从simplexml_load_file获取值并使用$items = $var->item;提取项目,但我无法弄清楚如何合并两个RSS提要之间的item子数组中的两个值。我尝试过使用array_merge,array_combine并将它们与加号串在一起。我最终得到了第一个RSS提要或第二个RSS值,但没有合并的值集。

有没有人有任何想法(说得很慢我通过交易成为DBA)。

TIA, 丹尼

1 个答案:

答案 0 :(得分:1)

尝试这样的事情,使用一个将整个xml对象转换为数组的递归函数,合并后的数组合并就不够了,你可以将它转换回对象。我认为问题是如果组合的两个xml文件具有相同的元素,它们可能会被合并覆盖。

function recursive_object_to_array($obj) {
if(is_object($obj)) $obj = (array) $obj;
if(is_array($obj)) {
    $new = array();
    foreach($obj as $key => $val) {
        $new[$key] = recursive_object_to_array($val);
    }
}
else $new = $obj;
return $new;
}

if (file_exists('test_folder/rss1.xml') && file_exists('test_folder/rss2.xml')) {

  $rss1 =  recursive_object_to_array(simplexml_load_file('test_folder/rss1.xml'));
  $rss2 =  recursive_object_to_array(simplexml_load_file('test_folder/rss2.xml'));
  $rss_combined = (object) array_merge((array) $rss1, (array) $rss2);

  var_dump($rss1);    //content of first rss file
  var_dump($rss2);    //content of second rss file
  var_dump($rss_combined); // contents when recombined as object

 //this is my best bet, since the array keys are the same for the example  i   used, you need to  create an associative array and loop over it. 

  $all_rss[1] = $rss1;
  $all_rss[2] = $rss2;

  var_dump($all_rss); // creates asscociative array on which to loop

} else {
  exit('Failed to open xml files.');
}

所以最后我会用一个数组来访问元素。我在后面的链接RSS W3schools

中使用了xml文件
    // get the xml
   $rss1 =  recursive_object_to_array(simplexml_load_file('test_folder/rss1.xml'));
   $rss2 =  recursive_object_to_array(simplexml_load_file('test_folder/rss2.xml'));

  // create assoaciative array
  $all_rss[1] = $rss1;
  $all_rss[2] = $rss2;
   // loop over array
  foreach($all_rss as $key=>$value){

      echo $value['channel']['title'];
      echo '</br></br>';
      echo $value['channel']['link'];
      echo '</br></br>';
   }