Php 显示两个XML响应中存在的子项
对php和XML仍然非常陌生,并且已经尝试寻找解决方案一段时间了 我试图比较两个XML返回,只显示它们中存在的子项。具体来说,我使用steam api从两个输入的steam id中获取游戏库,我想显示两个用户拥有的游戏 它现在将显示用户1拥有的所有游戏,而不是这样做 这里是我遇到问题的部分,$apinyckel是API密钥,我不在这篇文章中包括它,因为它不应该被共享Php 显示两个XML响应中存在的子项,php,xml,api,xml-parsing,steam-web-api,Php,Xml,Api,Xml Parsing,Steam Web Api,对php和XML仍然非常陌生,并且已经尝试寻找解决方案一段时间了 我试图比较两个XML返回,只显示它们中存在的子项。具体来说,我使用steam api从两个输入的steam id中获取游戏库,我想显示两个用户拥有的游戏 它现在将显示用户1拥有的所有游戏,而不是这样做 这里是我遇到问题的部分,$apinyckel是API密钥,我不在这篇文章中包括它,因为它不应该被共享 $steamid2 = $_SESSION['steamid2']; $steamid3 = $_SESSION['steamid
$steamid2 = $_SESSION['steamid2'];
$steamid3 = $_SESSION['steamid3'];
//user1
$url4 = "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=$apinyckel&steamid=$steamid2&format=xml&&include_appinfo=1";
$data4 = file_get_contents($url4);
$xml4 = simplexml_load_string($data4);
//user2
$url5 = "http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=$apinyckel&steamid=$steamid3&format=xml&&include_appinfo=1";
$data5 = file_get_contents($url5);
$xml5 = simplexml_load_string($data5);
foreach ($xml4->games->children() as $item2):
if ($xml4->games->child->appid === $xml5->games->child->appid) {
?><img src="http://media.steampowered.com/steamcommunity/public/images/apps/<?echo htmlentities($item2->appid);?>/<?echo htmlentities($item2->img_logo_url);?>.jpg"><?
}
endforeach;
$streamid2=$\u会话['streamid2'];
$steamid3=$\会话['steamid3'];
//用户1
$url4=”http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=$apinyckel&streamid=$streamid2&format=xml&&include\u appinfo=1”;
$data4=文件获取内容($url4);
$xml4=simplexml\u load\u字符串($data4);
//用户2
$url5=”http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=$apinyckel&streamid=$streamid3&format=xml&&include\u appinfo=1”;
$data5=文件获取内容($url5);
$xml5=simplexml\u load\u字符串($data5);
foreach($xml4->games->children()作为$item2):
如果($xml4->games->child->appid===$xml5->games->child->appid){
?>appid);?>/.jpg“>要获取消息数组,可以使用xpath:
$xml1 = $xml1->xpath('//message');
$xml2 = $xml2->xpath('//message');
,然后在数组中循环以比较它们
编辑:
为循环编码,从数组中提取名称并将其相交:
$messages1 = array();
array_map(
function($message) use (&$messages1) {
$messages1[(string) $message->appid] = (array) $message;
},
$xml1
);
$messages2 = array();
array_map(
function($message) use (&$messages2) {
$messages2[(string) $message->appid] = (array) $message;
},
$xml2
);
$result = array_intersect_key( $messages1, $messages2 );
foreach ( $result as $value ) {
echo '<img src="http://media.steampowered.com/steamcommunity/public/images/apps/'. htmlentities($value['appid']) .'/'. htmlentities($value['img_logo_url']) .'.jpg">';
}
$messages1=array();
数组映射(
函数($message)使用(&$messages1){
$messages1[(字符串)$message->appid]=(数组)$message;
},
$xml1
);
$messages2=array();
数组映射(
函数($message)使用(&$messages2){
$messages2[(字符串)$message->appid]=(数组)$message;
},
$xml2
);
$result=array\u intersect\u key($messages1,$messages2);
foreach(结果为$value){
回声';
}
希望有帮助。谢谢!明天会试用。嗯,我试过了,但出了点问题。$value['img\u logo\u url']和$value['appid']显示为正在比较的游戏名称的第一个字母。因此,img url的结果类似于““例如,我再次修改了代码,现在使用appid
键进行数组交叉,它可以正确地加载图像(使用示例xml),您还有一些xml格式的空白img_logo_url
值。感谢您的帮助!修改后的代码效果很好。是的,不幸的是,并非所有游戏都有图像。目前使用`onerror=` this.style.display=“none”``来隐藏损坏的图像。
$messages1 = array();
array_map(
function($message) use (&$messages1) {
$messages1[(string) $message->appid] = (array) $message;
},
$xml1
);
$messages2 = array();
array_map(
function($message) use (&$messages2) {
$messages2[(string) $message->appid] = (array) $message;
},
$xml2
);
$result = array_intersect_key( $messages1, $messages2 );
foreach ( $result as $value ) {
echo '<img src="http://media.steampowered.com/steamcommunity/public/images/apps/'. htmlentities($value['appid']) .'/'. htmlentities($value['img_logo_url']) .'.jpg">';
}