2013-09-05 2 views
1

У меня есть объект, содержащий массив объектов, которые я хочу пропустить. Print_r объекта выглядит следующим образом:Loop через объект, содержащий массив объектов

SimpleXMLElement Object 
(
    [NewDataSet] => SimpleXMLElement Object 
     (
      [Table1] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [DiamondID] => 44696069 
          [ShapeTitle] => Pear 
          [Weight] => 0.300 
          [ColorTitle] => G 
         ) 

        [1] => SimpleXMLElement Object 
         (
          [DiamondID] => 44775332 
          [ShapeTitle] => Pear 
          [Weight] => 0.300 
          [ColorTitle] => G 
         ) 

        [2] => SimpleXMLElement Object 
         (
          [DiamondID] => 46959935 
          [ShapeTitle] => Pear 
          [Weight] => 0.340 
          [ColorTitle] => D 
         ) 
       ) 
     ) 
) 

Объект вышел из некоторого XML, что я ВОССТАНОВЛЕНИЕ с помощью вызова SOAP.

Я хотел бы пройти через массив «Table1», обращаясь к каждому объекту. Я делаю это с помощью:

foreach($rapnetresult->NewDataSet->Table1 as $itemno=>$diamond) { 
    echo "<p>Item #$itemno<br>"; 
    echo "DiamondID: " . $diamond->DiamondID . "<br>"; 
    echo "ShapeTitle: " . $diamond->ShapeTitle. "<br>"; 
    echo "Weight: " . $diamond->Weight"</p>"; 
} 

Это производит следующий вывод:

Item #Table1 
DiamondID: 44696069 
ShapeTitle: Pear 
Weight: 0.300 

Item #Table1 
DiamondID: 44775332 
ShapeTitle: Pear 
Weight: 0.300 

Item #Table1 
DiamondID: 46959935 
ShapeTitle: Pear 
Weight: 0.340 

Это то, что я хочу, где я могу получить доступ к каждому объекту. Однако я смущен тем, почему переменная $ itemno всегда имеет значение «Таблица1». Я бы предположил, что это ключи массива Table1, то есть: 0, 1, 2 и т. Д.

Может кто-нибудь объяснить, почему я не получаю ожидаемый ключ? И что я должен сделать, чтобы получить ключ?

+0

Ваш foreach кажется правильным hmmm –

+0

Я получаю такое же поведение с отдельным тестом. $ itemno всегда является тегом, а не индексом .. может быть по дизайну по какой-то причине .. – Ben

+0

вы можете сохранить отдельный индекс (init до нуля до цикла и ++ на каждой итерации) – Ben

ответ

0

Это происходит потому, что структуры simpleXML не являются нормальными массивами, а вместо этого являются итераторами, у которых нет индекса массива.

Решение для ручного ведения собственного индекса.

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