Сравните два разных ключа массива, затем сделайте что-то со значениями, которых нет в первом массиве - PullRequest
1 голос
/ 24 июня 2011

Массивы кажутся одним из тех предметов, которые просто не хотят нажимать на меня. В SQL это выглядело проще ... Надеюсь, вы поможете ...

У меня есть два массива, которые я хочу сравнить раскладки ключей совершенно разные, я хочу сравнить * $ first_array-> place-> name * с * $ second_array-> post_name * тогда, если значение из первого массива не не существует во втором, то я хочу что-то с этим сделать, возможно, оператор вставки вида ..

<code>  $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"
"; $ Second_array = get_pages (); // Получить список сообщений из WP echo "

Проверьте, что мы получаем значение из 2-го массива:". $ second_array [0] -> post_name. "

"; // Эхо "
";
    //var_dump($second_array);
    //echo"
";

Из первого массива ..

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"

1024 * более *

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

Разница, очевидно, в том, что Япония и Израиль

Обновление прогресса # 1

Я получил стадию, когда у меня есть два результата для записей, которые действительно существуют, но я хочу отдельный список записей, которые существуют в файле XML, но НЕ существует в $ second_array :

<code><?php 

  $xml = simplexml_load_file('xml/regions.xml');
   // echo "<p>".$xml->place[0]->name."</p>";
    echo"<pre>";
    var_dump($xml);
    echo"
"; $ args = array ('post_type' => 'page', 'child_of' => 20, 'exclude' => 22); $ Wparray = get_pages ($ арг); // echo "

". $ wparray [0] -> post_name. "

"; эхо "
";
    var_dump($wparray);
    echo"
"; foreach ($ xml as $ yregions_places) { для ($ j = 0; $ j name == $ wparray [$ j] -> post_title) { echo "

". $ yregions_places-> name. "

"; } } } ?>

Может ли кто-нибудь помочь мне перейти на следующий этап? Я действительно пытаюсь!

Обновление прогресса № 2

После указателя Брайана мне удалось, я думаю, у меня есть оба набора данных в массиве:

<code> $yregions_xml = (array)simplexml_load_file('xml/regions.xml');
  // echo"<pre>";
  // var_dump($yregions_xml);
  // echo"
"; $ yregions_xml = array_pop ($ yregions_xml); для ($ j = 0; $ j ". (trim (strtolower ($ yregions_xml [$ j] -> name))). ""; } $ wpargs = array ('post_type' => 'page', 'child_of' => 20, 'exclude' => 22); $ Wparray = get_pages ($ wpargs); // echo "
";
  // var_dump($wparray);
  // echo"
"; для ($ j = 0; $ j ". (trim (strtolower ($ wparray [$ j] -> post_name))). "";

Так не мне ли делать какое-то сравнение?

Обновление о прогрессе # 3

<code>//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 "
"; // теперь делаем ваш SQL и т. д. с этим новым массивом

Завершенный код

Я оставил весь прогресс там, чтобы каждый мог видеть, что работа идет, надеюсь, это поможет другим больше. Я знаю, что боролся с этим. Спасибо @brian_d и @rrapuya за полные и прокомментированные ответы о помощи.

<code>// 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 "
"; // теперь делаем ваш SQL и т. д. с этим новым массивом

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Надеюсь, это поможет.Две ключевые точки заполняют ваши массивы из данных объекта и затем используют функцию 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
0 голосов
/ 24 июня 2011

попробуйте это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

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...