PHP因组的元素的类型
题
确定这里是我的困境。我在寻找一种方式,以巩固的数据在一个集团使用 因PHP.这里就是我的意思。
让我们说有一个xml,看起来是这样的:
<favorites>
<interesting>
<type>Movie</type>
<character>James Bond</character>
<name>Casino Royale</name>
</interesting>
<interesting>
<type>Movie</type>
<character>Jason Bourne</character>
<name>Bourne Identity</name>
</interesting>
<interesting>
<type>Book</type>
<character>Lindsay Ford</character>
<name>Shantaram</name>
</interesting>
</favorites>
现在,这里就是我想要的这看起来像:
电影
- 皇家赌场-詹姆斯*邦德Bourne
- 伯恩的身份-杰森*伯恩
本书
- 项塔兰-林赛*福特
请帮帮我!如果让我知道什么是混乱。
解决方案
如果你不提前通知该类型的电影,你可以:
- 提取的所有类型的XML数据
- 让他们作为独特,因为他们可能会出现多次(可能有的方式做到这一XPath;我不知道,所以我将使用
array_unique
)
- 让他们作为独特,因为他们可能会出现多次(可能有的方式做到这一XPath;我不知道,所以我将使用
- 迭代,这些类型、使用的是什么 @拟议的标记.
这样的事情可能会这样做:
$xml = simplexml_load_string($xmlData);
$typesListXml = $xml->xpath('interesting/type');
var_dump($typesListXml); // var_dump #1
if (!empty($typesListXml)) {
$typesList = array();
foreach ($typesListXml as $typeXml) {
$typesList[] = (string)$typeXml;
}
var_dump($typesList); // var_dump #2
$typesList = array_unique($typesList);
var_dump($typesList); // var_dump #3
$moviesForType = array();
foreach ($typesList as $type) {
$rawData = $xml->xpath('interesting[type="' . $type . '"]');
if (!empty($rawData)) {
foreach ($rawData as $rawMovie) {
$moviesForType[$type][] = $rawMovie->name . ' - ' . $rawMovie->character;
}
}
}
var_dump($moviesForType); // var_dump #4
// Up to you to present $moviesForType the way you want ;-)
}
并让事情更容易理解,这里是var_dump的产出:
var_dump#1 :
array
0 =>
object(SimpleXMLElement)[2]
string 'Movie' (length=5)
1 =>
object(SimpleXMLElement)[3]
string 'Movie' (length=5)
2 =>
object(SimpleXMLElement)[4]
string 'Book' (length=4)
var_dump#2 :
array
0 => string 'Movie' (length=5)
1 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
var_dump#3 :
array
0 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
var_dump#3 :
array
'Movie' =>
array
0 => string 'Casino Royale - James Bond' (length=26)
1 => string 'Bourne Identity - Jason Bourne' (length=30)
'Book' =>
array
0 => string 'Shantaram - Lindsay Ford' (length=24)
现在,这是给你明这些数据的方式;双foreach环路的修建 <ul>
和 <li>
标签可能会做 ;-)
其他提示
我相信你是在寻找Xpath:
$xmlData = '<favorites>...</favorites>';
$xml = simplexml_load_string($xmlData);
$arrMovies = $xml->xpath('interesting[type="Movie"]');
$arrBooks = $xml->xpath('interesting[type="Book"]');
你可以再循环美arrMovies美元arrBooks和打印出来,你需要什么:
foreach($arrMovies as $movie) {
echo $movie->name;
}
不隶属于 StackOverflow