2013-02-11 3 views
1

У меня возникли проблемы с пониманием правильного синтаксиса для печати результатов массива с помощью SimpleXMLElement. Из моего результата xml я должен попросить пользователя совместить себя с одним из людей, найденных в массиве, и не знаю, как это сделать.Анализ массива в XML-результате

Пример результата XML:

[authentication] => SimpleXMLElement Object 
    (
     [age] => SimpleXMLElement Object 
      (
       [code] => 5 
       [ambiguous] => SimpleXMLElement Object 
        (
         [person] => Array 
          (
           [0] => SimpleXMLElement Object 
            (
             [name] => Paul Foreman 
             [question] => SimpleXMLElement Object 
              (
               [id] => dcalc3 
               [prompt] => What+do+the+%3Cb%3Elast+four%3C%2Fb%3E+digits+of+your+Social+Security+Number+add+up+to%3F 
               [answer] => 5 
              ) 

            ) 

           [1] => SimpleXMLElement Object 
            (
             [name] => Paul Foreman 
             [question] => SimpleXMLElement Object 
              (
               [id] => dcalc3 
               [prompt] => What+do+the+%3Cb%3Elast+four%3C%2Fb%3E+digits+of+your+Social+Security+Number+add+up+to%3F 
               [answer] => 6 
              ) 

            ) 

          ) 

        ) 

      ) 

    ) 

Решение им ищет:

<?php 
$string = $xml_result; 

$xml = new SimpleXMLElement($string); 

$is_age_code = $xml->authentication->{'age'}->code; 

if($x_is_age_code == '5'){ 
// code 5 means more than one match found 
    // Ask user verification question 
     // If answer matches question 
       // Set current user as that person 
} 
?> 

Как я могу узнать, сколько «Лица» в массиве и идентифицировать их с номером?

+0

Поэтому, учитывая ваш пример XML , номер, который вы ищете, будет 2? Потому что в массиве есть 2 человека '$ xml-> authentication-> age-> ambiguous-> person'? Затем вы можете использовать 'count ($ xml-> authentication-> age-> ambiguous-> person)'. – migg

+0

Я вижу, спасибо, но как я могу ответить на вопрос? $ xml-> authentication -> {'age'} -> ambiguos -> {'person'} -> question -> {'prompt'} не работает и не $ xml-> authentication -> {'age'} -> ambiguos -> {'person'} -> 0 -> {'question'} -> prompt – Hector

+0

Попробуйте '$ xml-> authentication-> age-> ambiguous-> person [0] -> question-> prompt'. Поскольку 'person' является массивом, вы должны использовать его как массив, а не объект. – migg

ответ

0

Для подсчета количества лиц использует:

echo count($xml->authentication->age->ambiguous->person); 

Чтобы получить доступ к подузлам человека использовать

echo $xml->authentication->age->ambiguous->person[0]->question->prompt; 

или с петлей:

foreach ($xml->authentication->age->ambiguous->person as $person) { 
    echo $person->question->prompt; 
} 
+0

Спасибо, что это сработало, что помогло мне написать свою логику для этого, используя цикл. – Hector

Смежные вопросы