문제

좋아, 여기 내 딜레마가 있습니다. 나는 그룹에서 데이터를 통합하는 방법을 찾고 있습니다. php의 단순 렉스 ML. 내가 의미하는 바는 다음과 같습니다.

다음과 같이 보이는 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 Identity -Jason Bourne

  • Shantaram -Lindsay Ford

도와주세요!! 혼란스러운 것이 있으면 알려주세요.

도움이 되었습니까?

해결책

영화 유형을 미리 알지 못하면 다음을 수행 할 수 있습니다.

  • XML 데이터에서 모든 유형을 추출하십시오
    • 여러 번 나타날 수 있으므로 독창적으로 얻습니다 (XPath로 수행 할 수있는 방법이있을 수 있습니다. 모르겠습니다. array_unique)
  • 이러한 유형을 반복하여 무엇을 사용하십시오 @mark 제안.


이런 일은 아마도 다음과 같습니다.

$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)


이제 원하는 방식으로 해당 데이터를 제시하는 것은 귀하에게 달려 있습니다. 이중 연장 루프 구성 <ul> 그리고 <li> 태그는 아마도 할 것입니다 ;-)

다른 팁

나는 당신이 xpath를 찾고 있다고 믿습니다 :

$xmlData = '<favorites>...</favorites>';
$xml = simplexml_load_string($xmlData);
$arrMovies = $xml->xpath('interesting[type="Movie"]');
$arrBooks = $xml->xpath('interesting[type="Book"]');

그런 다음 $ Arrmovies와 $ Artubes를 반복하고 필요한 것을 인쇄 할 수 있습니다.

foreach($arrMovies as $movie) {
    echo $movie->name;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top