【发布时间】:2011-09-21 14:34:31
【问题描述】:
数组似乎是我不想点击的主题之一。在 SQL 中似乎更容易......我希望你能提供帮助..
我有两个数组,我希望比较键布局完全不同,我希望比较 *$first_array->place->name* 和 *$second_array->post_name* 如果第一个数组中的值不'在第二个中不存在,然后我想对此做点什么,可能是一个插入语句。
$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>";
从第一个数组..
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 文件中存在的记录的不同列表,但 DO NOT 存在于 $ 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
【问题讨论】:
-
您意识到这些是您要比较的对象,而不是数组?
-
@brian_d 感谢您的指点