比较两个不同的数组键,然后对第一个数组中不存在的值执行某些操作

时间:2011-06-23 21:52:45

标签: php xml arrays wordpress

阵列似乎是那些不想为我点击的主题之一。在SQL中看起来比较容易......我希望你能帮忙......

我有两个数组,我希望比较键布局是完全不同的,我希望比较* $ first_array-> place-> name * with * $ second_array-> post_name * then if if a value from the第一个数组在第二个数组中不存在然后我想对此做一些事情,可能是排序的Insert语句..

  $first_array=simplexml_load_file('xml/file.xml'); // Load an XML file
   echo "<p>Check we are getting a value from the 1st array: ".$first_array->place[0]->name."</p>";
    //echo"<pre>";
    //var_dump($first_array);
    //echo"</pre>";

 $second_array=get_pages(); // Get a list of Posts from WP
   echo "<p>Check we are getting a value from the 2nd array: ".$second_array[0]->post_name."</p>";
    //echo"<pre>";
    //var_dump($second_array);
    //echo"</pre>";

来自First Array ..

object(SimpleXMLElement)#99 (1) {
  ["place"]=>
  array(5) {
    [0]=>
    object(SimpleXMLElement)#101 (14) {
      ["name"]=>
  string(5) "China"

来自第二阵列..

array(6) {
  [0]=>
  object(stdClass)#199 (24) {
    ["post_title"]=>
    string(5) "Japan"

更多

  [1]=>
  object(stdClass)#197 (24) {
    ["post_title"]=>
    string(5) "China"

更多

  [2]=>
  object(stdClass)#197 (24) {
    ["post_title"]=>
    string(6) "Israel"

差异显然是日本和以色列

进度更新#1

我得到了一个阶段,我有两个结果用于存在的记录,但我想要一个XML文件中存在的记录的明确列表,但不要存在于$ second_array:

<?php 

  $xml = simplexml_load_file('xml/regions.xml');
   // echo "<p>".$xml->place[0]->name."</p>";
    echo"<pre>";
    var_dump($xml);
    echo"</pre>";

 $args = array('post_type' => 'page','child_of' => 20,'exclude' => 22);
 $wparray=get_pages($args);
   // echo  "<p>".$wparray[0]->post_name."</p>";
    echo"<pre>";
    var_dump($wparray);
    echo"</pre>";

 foreach($xml as $yregions_places) { 
  for($j=0;$j<count($wparray);$j++) {
   if($yregions_places->name==$wparray[$j]->post_title) { 
    echo "<p style=\"color:green;\">".$yregions_places->name."<p>"; } 
   }
  }

?>

有人可以帮助我进入下一阶段吗?我真的在尝试!

进度更新#2

在Brian的指针之后,我已经管理过,我认为我在数组中有两组数据:

 $yregions_xml = (array)simplexml_load_file('xml/regions.xml');
  // echo"<pre>";
  // var_dump($yregions_xml);
  // echo"</pre>";
  $yregions_xml = array_pop($yregions_xml);
   for($j=0;$j<count($yregions_xml);$j++) {
    echo "<p style=\"color:purple;\">".(trim(strtolower($yregions_xml[$j]->name)))."</p>";
   }

 $wpargs = array('post_type' => 'page','child_of' => 20,'exclude' => 22);
 $wparray=get_pages($wpargs);
  // echo"<pre>";
  // var_dump($wparray);
  // echo"</pre>";
  for($j=0;$j<count($wparray);$j++) {
    echo "<p style=\"color:green;\">".(trim(strtolower($wparray[$j]->post_name)))."</p>";

所以不是我必须做一些比较吗?

进度更新#3

//store XML data in SimpleXMLObject
$xml = simplexml_load_file('xml/file.xml'); 
$first_array=array_pop($yregions_xml);

//initiate arrays
$first_array = array();
$second_array = array();

//populate arrays with object data that interests us
foreach($xml->place as $place){
    foreach($place as $name){
    $first_array[] = $name;
    echo "<p style=\"color:green;\">".$name."</p>";
 }
}

$wpargs = array('post_type' => 'page','child_of' => 20,'exclude' => 22);
foreach(get_pages($wpargs) as $page){
    $second_array[] = $page->post_title;
    echo "<p style=\"color:red;\">".$page->post_title."</p>";
}

//perform comparison    
$unique_to_first_array = array_diff($first_array,$second_array);
echo "<pre>";
var_dump($unique_to_first_array);
echo "</pre>";

//now do your SQL, etc with this new array

已完成的代码

我将所有进展留在那里,所以每个人都可以看到正在进行的工作,希望这将有助于其他人。我知道我一直在努力。感谢@brian_d和@rrapuya提供的完整和评论的帮助答案。

// store XML data in SimpleXMLObject
   $xml = simplexml_load_file('xml/file.xml'); 

// initiate arrays
   $first_array = array();
   $second_array = array();

// populate arrays with object data that interests us
   foreach($xml->place as $place){
    foreach($place->name as $name){
     $first_array[] = $name;
     // echo "<p style=\"color:green;\">".$name."</p>";
    }
   }

   $wpargs = array('post_type' => 'page','child_of' => 20,'exclude' => 22);
    foreach(get_pages($wpargs) as $page){
     $second_array[] = $page->post_title;
     // echo "<p style=\"color:red;\">".$page->post_title."</p>";
    }

// perform comparison    
   $unique_to_first_array = array_diff($first_array,$second_array);
    echo "<pre>";
    var_dump($unique_to_first_array);
    echo "</pre>";

//now do your SQL, etc with this new array

2 个答案:

答案 0 :(得分:2)

我希望这会有所帮助。两个关键点是从对象数据填充数组,然后使用PHP函数array_diff获取仅在第一个数组中找到的值。

//store XML data in SimpleXMLObject
$xml = simplexml_load_file('xml/file.xml'); 

//initiate arrays
$first_array = array();
$second_array = array();

//populate arrays with object data that interests us
foreach($xml->place as $place){
    foreach($place as $name){
        $first_array[] = (string)$name;
    }
}

foreach(get_pages() as $page){
    $second_array[] = $page->post_title;
}

//perform comparision    
$unique_to_first_array = array_diff($first_array, $second_array);

//now do your SQL, etc with this new array

答案 1 :(得分:0)

试试这个作为foreach($ first_array as $ arrobj){

for($j=0;$j<count($second_array);$j++){
    if($arrobj->place->name ==$second_array[$j]->post_title){
        //do query here
    }else{
    //do query here

    }
}

}