您可以結合使用SimpleXMLElement
,foreach
,file_get_contents
和preg_split
來獲得您想要的結果。這是什麼意思:
<?php
// GET THE CONTENTS OF THE TEXT FILE CONTAINING IDS
// AND BUNDLE IT INTO A VARIABLE FOR LATER USE.
$txtFileContent = file_get_contents(__DIR__ . "/ids.txt");
// CONVERT THE CONTENTS OF THE TEXT FILE TO AN ARRAY
$arrTextData = preg_split("#[\n\r]#", $txtFileContent);
// CREATE A SIMPLE XML ELEMENT USING THE XML FILE.
$sXML = new SimpleXMLElement(__DIR__ . "/xml_file_name.xml", 0, true);
// LOOP THROUGH ALL THE ELEMENTS IN THE CHILDREN LIST
// AND TRY TO MATCH EACH ELEMENT WITH EACH KEY ON THE $arrTextData ARRAY.
// THIS WOULD IMPLY A NESTED LOOP... ALSO BUILD AN ARRAY OF
// MATCHED-ELEMENTS WITH THE UNIQUE ID AS THE KEY IN THE PROCESS.
$arrMatchedElements = array();
foreach($sXML->children() as $nodeKey=>$nodeData){
/**@var SimpleXMLElement $nodeData */
foreach($arrTextData as $iKey=>$ID){
if($ID == $nodeData->attributes()->id){
$arrMatchedElements[$ID] = $nodeData->attributes();
}
}
}
var_dump($arrMatchedElements);
// THE var_dump(...) PRODUCES...
array (size=3)
29012520 =>
object(SimpleXMLElement)[6]
public '@attributes' =>
array (size=9)
'id' => string '29012520' (length=8)
'visible' => string 'true' (length=4)
'version' => string '2' (length=1)
'changeset' => string '3098893' (length=7)
'timestamp' => string '2009-11-12T15:12:59Z' (length=20)
'user' => string 'Abuls' (length=5)
'uid' => string '14113' (length=5)
'lat' => string '56.7183050' (length=10)
'lon' => string '21.6051939' (length=10)
29012516 =>
object(SimpleXMLElement)[5]
public '@attributes' =>
array (size=9)
'id' => string '29012516' (length=8)
'visible' => string 'true' (length=4)
'version' => string '2' (length=1)
'changeset' => string '3100827' (length=7)
'timestamp' => string '2009-11-12T19:23:00Z' (length=20)
'user' => string 'Abuls' (length=5)
'uid' => string '14113' (length=5)
'lat' => string '56.7180402' (length=10)
'lon' => string '21.6222515' (length=10)
29012514 =>
object(SimpleXMLElement)[8]
public '@attributes' =>
array (size=9)
'id' => string '29012514' (length=8)
'visible' => string 'true' (length=4)
'version' => string '2' (length=1)
'changeset' => string '3100827' (length=7)
'timestamp' => string '2009-11-12T19:23:00Z' (length=20)
'user' => string 'Abuls' (length=5)
'uid' => string '14113' (length=5)
'lat' => string '56.7191410' (length=10)
'lon' => string '21.6324709' (length=10)
您也可以使這更面向對象,像這樣:
<?php
// GET THE CONTENTS OF THE TEXT FILE CONTAINING IDS
// AND BUNDLE IT INTO A VARIABLE FOR LATER USE.
$txtFileContent = file_get_contents(__DIR__ . "/ids.txt");
// CONVERT THE CONTENTS OF THE TEXT-FILE TO AN ARRAY
$arrTextData = preg_split("#[\n\r]#", $txtFileContent);
// CREATE A SIMPLE XML ELEMENT USING THE XML FILE.
$sXML = new SimpleXMLElement(__DIR__ . "/xml_file_name.xml", 0, true);
// LOOP THROUGH ALL THE ELEMENTS IN THE CHILDREN LIST
// AND TRY TO MATCH EACH ELEMENT WITH EACH KEY ON THE $arrTextData ARRAY.
// THIS WOULD IMPLY A NESTED LOOP... ALSO BUILD A MATCHED-ELEMENTS
// ARRAY IN THE PROCESS.
$arrMatchedElements = array();
foreach($sXML->children() as $nodeKey=>$nodeData){
/**@var SimpleXMLElement $nodeData */
foreach($arrTextData as $iKey=>$ID){
if($ID == $nodeData->attributes()->id){
$tempPropsObj = new stdClass();
$tempPropsObj->id = $nodeData->attributes()
->id->__toString();
$tempPropsObj->lon = $nodeData->attributes()->lon->__toString();
$tempPropsObj->lat = $nodeData->attributes()->lon->__toString();
$tempPropsObj->uid = $nodeData->attributes()->uid->__toString();
$tempPropsObj->user = $nodeData->attributes()->user->__toString();
$tempPropsObj->timestamp = $nodeData->attributes()->timestamp->__toString();
$tempPropsObj->changeset = $nodeData->attributes()->changeset->__toString();
$tempPropsObj->version = $nodeData->attributes()->version->__toString();
$tempPropsObj->visible = $nodeData->attributes()->visible->__toString();
$arrMatchedElements[$ID] = $tempPropsObj;
}
}
}
var_dump($arrMatchedElements);
// DISPLAYS...
array (size=3)
29012520 =>
object(stdClass)[6]
public 'id' => string '29012520' (length=8)
public 'lon' => string '21.6051939' (length=10)
public 'lat' => string '21.6051939' (length=10)
public 'uid' => string '14113' (length=5)
public 'user' => string 'Abuls' (length=5)
public 'timestamp' => string '2009-11-12T15:12:59Z' (length=20)
public 'changeset' => string '3098893' (length=7)
public 'version' => string '2' (length=1)
public 'visible' => string 'true' (length=4)
29012516 =>
object(stdClass)[5]
public 'id' => string '29012516' (length=8)
public 'lon' => string '21.6222515' (length=10)
public 'lat' => string '21.6222515' (length=10)
public 'uid' => string '14113' (length=5)
public 'user' => string 'Abuls' (length=5)
public 'timestamp' => string '2009-11-12T19:23:00Z' (length=20)
public 'changeset' => string '3100827' (length=7)
public 'version' => string '2' (length=1)
public 'visible' => string 'true' (length=4)
29012514 =>
object(stdClass)[8]
public 'id' => string '29012514' (length=8)
public 'lon' => string '21.6324709' (length=10)
public 'lat' => string '21.6324709' (length=10)
public 'uid' => string '14113' (length=5)
public 'user' => string 'Abuls' (length=5)
public 'timestamp' => string '2009-11-12T19:23:00Z' (length=20)
public 'changeset' => string '3100827' (length=7)
public 'version' => string '2' (length=1)
public 'visible' => string 'true' (length=4)
希望這有助於有點.... GOOD LUCK ;-)
也就是說,我已經嘗試了這麼多的代碼選項,我無法理解的事情我在做什麼了 - 所有的東西我迄今發現的是,如果其他數組包含您正在搜索的完全相同的值,則不會有問題來比較數組。但在這種情況下,我正在搜索數組值部分包含我正在搜索的值的情況 –
因此基本上,如果在2.txt的節點ID中找到來自1.txt的任何行,則檢索相應的緯度和經度值。對? –
是的,這是正確的 –