Page 1 of 1

Looping Through Nested Array

Posted: Thu Nov 15, 2007 7:58 pm
by tommyready
Ok, I parse through a xml file and create an array of the data. I now need to loop through all the nested arrays but I'm unsure of how to do this.

The Array:

Code: Select all

Array
(
    [0] => Array
        (
            [name] => BOARD
            [attrs] => Array
                (
                    [CATEGORY] => total
                    [FILTER] => 
                    [STAT] => total_xp
                    [PAGE] => 1
                    [ALL_PAGES] => 400
                )

            [child] => Array
                (
                    [0] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Supreme Commander
                                    [TOTAL_ACCURACY] => 37.1042
                                    [TOTAL_DEATHS] => 7796
                                    [TOTAL_KILLS] => 32450
                                    [COUNTRY] => United States
                                    [USERNAME] => MechanicaL
                                    [RANK] => 1
                                    [TOTAL_XP] => 136314
                                    [USER_ID] => 25398
                                )

                        )

                    [1] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Supreme Commander
                                    [TOTAL_ACCURACY] => 34.5358
                                    [TOTAL_DEATHS] => 14760
                                    [TOTAL_KILLS] => 19125
                                    [COUNTRY] => Australia
                                    [USERNAME] => Kazahel
                                    [RANK] => 2
                                    [TOTAL_XP] => 133050
                                    [USER_ID] => 2386
                                )

                        )

                    [2] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Brigadier General
                                    [TOTAL_ACCURACY] => 23.7006
                                    [TOTAL_DEATHS] => 6342
                                    [TOTAL_KILLS] => 13551
                                    [COUNTRY] => Unknown
                                    [USERNAME] => Elektromode
                                    [RANK] => 3
                                    [TOTAL_XP] => 131908
                                    [USER_ID] => 6933
                                )

                        )

                    [3] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => General
                                    [TOTAL_ACCURACY] => 34.7196
                                    [TOTAL_DEATHS] => 6286
                                    [TOTAL_KILLS] => 26430
                                    [COUNTRY] => United States
                                    [USERNAME] => DomMafia
                                    [RANK] => 4
                                    [TOTAL_XP] => 126922
                                    [USER_ID] => 21597
                                )

                        )

                    [4] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Supreme Commander
                                    [TOTAL_ACCURACY] => 31.6598
                                    [TOTAL_DEATHS] => 8380
                                    [TOTAL_KILLS] => 14641
                                    [COUNTRY] => Netherlands
                                    [USERNAME] => VanSlater
                                    [RANK] => 5
                                    [TOTAL_XP] => 121213
                                    [USER_ID] => 5441
                                )

                        )

                    [5] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => General
                                    [TOTAL_ACCURACY] => 31.008
                                    [TOTAL_DEATHS] => 14387
                                    [TOTAL_KILLS] => 22521
                                    [COUNTRY] => Unknown
                                    [USERNAME] => 100DM
                                    [RANK] => 6
                                    [TOTAL_XP] => 120624
                                    [USER_ID] => 465
                                )

                        )

                    [6] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Supreme Commander
                                    [TOTAL_ACCURACY] => 33.1214
                                    [TOTAL_DEATHS] => 10733
                                    [TOTAL_KILLS] => 13116
                                    [COUNTRY] => Germany
                                    [USERNAME] => RaLLe
                                    [RANK] => 7
                                    [TOTAL_XP] => 118551
                                    [USER_ID] => 2140
                                )

                        )

                    [7] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => General
                                    [TOTAL_ACCURACY] => 31.2117
                                    [TOTAL_DEATHS] => 9432
                                    [TOTAL_KILLS] => 26060
                                    [COUNTRY] => Germany
                                    [USERNAME] => aRiz
                                    [RANK] => 8
                                    [TOTAL_XP] => 114948
                                    [USER_ID] => 1258
                                )

                        )

                    [8] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Field Marshal
                                    [TOTAL_ACCURACY] => 25.7771
                                    [TOTAL_DEATHS] => 16830
                                    [TOTAL_KILLS] => 15526
                                    [COUNTRY] => Unknown
                                    [USERNAME] => DressToKill
                                    [RANK] => 9
                                    [TOTAL_XP] => 113466
                                    [USER_ID] => 12786
                                )

                        )

                    [9] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Commander General
                                    [TOTAL_ACCURACY] => 29.5076
                                    [TOTAL_DEATHS] => 12975
                                    [TOTAL_KILLS] => 23317
                                    [COUNTRY] => Unknown
                                    [USERNAME] => Zipoui
                                    [RANK] => 10
                                    [TOTAL_XP] => 111853
                                    [USER_ID] => 39062
                                )

                        )

                    [10] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Lieutenant General
                                    [TOTAL_ACCURACY] => 29.8177
                                    [TOTAL_DEATHS] => 9437
                                    [TOTAL_KILLS] => 14636
                                    [COUNTRY] => Unknown
                                    [USERNAME] => BBBYurifol
                                    [RANK] => 11
                                    [TOTAL_XP] => 107715
                                    [USER_ID] => 8266
                                )

                        )

                    [11] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Colonel
                                    [TOTAL_ACCURACY] => 25.2158
                                    [TOTAL_DEATHS] => 7822
                                    [TOTAL_KILLS] => 13438
                                    [COUNTRY] => United States
                                    [USERNAME] => M2MG
                                    [RANK] => 12
                                    [TOTAL_XP] => 106766
                                    [USER_ID] => 29470
                                )

                        )

                    [12] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Lieutenant General
                                    [TOTAL_ACCURACY] => 26.925
                                    [TOTAL_DEATHS] => 12850
                                    [TOTAL_KILLS] => 14459
                                    [COUNTRY] => Unknown
                                    [USERNAME] => frizlefry
                                    [RANK] => 13
                                    [TOTAL_XP] => 102323
                                    [USER_ID] => 23736
                                )

                        )

                    [13] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Field Marshal
                                    [TOTAL_ACCURACY] => 32.2771
                                    [TOTAL_DEATHS] => 12636
                                    [TOTAL_KILLS] => 20110
                                    [COUNTRY] => Unknown
                                    [USERNAME] => MixoMaToZ
                                    [RANK] => 14
                                    [TOTAL_XP] => 100553
                                    [USER_ID] => 7041
                                )

                        )

                    [14] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Colonel
                                    [TOTAL_ACCURACY] => 35.3787
                                    [TOTAL_DEATHS] => 9431
                                    [TOTAL_KILLS] => 22796
                                    [COUNTRY] => United States
                                    [USERNAME] => Sgt.Hardup
                                    [RANK] => 15
                                    [TOTAL_XP] => 96971
                                    [USER_ID] => 21688
                                )

                        )

                    [15] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Group Commander
                                    [TOTAL_ACCURACY] => 27.8226
                                    [TOTAL_DEATHS] => 6271
                                    [TOTAL_KILLS] => 12102
                                    [COUNTRY] => Germany
                                    [USERNAME] => cr4y75
                                    [RANK] => 16
                                    [TOTAL_XP] => 96666
                                    [USER_ID] => 7757
                                )

                        )

                    [16] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Lieutenant General
                                    [TOTAL_ACCURACY] => 28.8619
                                    [TOTAL_DEATHS] => 16793
                                    [TOTAL_KILLS] => 18300
                                    [COUNTRY] => Unknown
                                    [USERNAME] => Tanzverbot
                                    [RANK] => 17
                                    [TOTAL_XP] => 96432
                                    [USER_ID] => 658
                                )

                        )

                    [17] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Field Marshal
                                    [TOTAL_ACCURACY] => 30.7003
                                    [TOTAL_DEATHS] => 8085
                                    [TOTAL_KILLS] => 16006
                                    [COUNTRY] => United Kingdom
                                    [USERNAME] => DyLaN
                                    [RANK] => 18
                                    [TOTAL_XP] => 95060
                                    [USER_ID] => 6304
                                )

                        )

                    [18] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => General
                                    [TOTAL_ACCURACY] => 29.631
                                    [TOTAL_DEATHS] => 8697
                                    [TOTAL_KILLS] => 14547
                                    [COUNTRY] => France
                                    [USERNAME] => X-Black
                                    [RANK] => 19
                                    [TOTAL_XP] => 94398
                                    [USER_ID] => 43726
                                )

                        )

                    [19] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Brigadier
                                    [TOTAL_ACCURACY] => 23.8554
                                    [TOTAL_DEATHS] => 13515
                                    [TOTAL_KILLS] => 12251
                                    [COUNTRY] => United States
                                    [USERNAME] => Natural-Causes
                                    [RANK] => 20
                                    [TOTAL_XP] => 92535
                                    [USER_ID] => 22438
                                )

                        )

                    [20] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => General
                                    [TOTAL_ACCURACY] => 40.0914
                                    [TOTAL_DEATHS] => 11263
                                    [TOTAL_KILLS] => 13268
                                    [COUNTRY] => Germany
                                    [USERNAME] => eX2tremiousU
                                    [RANK] => 21
                                    [TOTAL_XP] => 92528
                                    [USER_ID] => 3107
                                )

                        )

                    [21] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Major General
                                    [TOTAL_ACCURACY] => 27.2189
                                    [TOTAL_DEATHS] => 11912
                                    [TOTAL_KILLS] => 10992
                                    [COUNTRY] => Germany
                                    [USERNAME] => Achilles33
                                    [RANK] => 22
                                    [TOTAL_XP] => 91745
                                    [USER_ID] => 8019
                                )

                        )

                    [22] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Commander General
                                    [TOTAL_ACCURACY] => 32.2195
                                    [TOTAL_DEATHS] => 9057
                                    [TOTAL_KILLS] => 14369
                                    [COUNTRY] => United Kingdom
                                    [USERNAME] => Silent.Jay
                                    [RANK] => 23
                                    [TOTAL_XP] => 91594
                                    [USER_ID] => 4921
                                )

                        )

                    [23] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Commander General
                                    [TOTAL_ACCURACY] => 36.8538
                                    [TOTAL_DEATHS] => 7466
                                    [TOTAL_KILLS] => 14500
                                    [COUNTRY] => Germany
                                    [USERNAME] => zyRot
                                    [RANK] => 24
                                    [TOTAL_XP] => 91265
                                    [USER_ID] => 34702
                                )

                        )

                    [24] => Array
                        (
                            [name] => PLAYER
                            [attrs] => Array
                                (
                                    [MILITARY_RANK] => Field Marshal
                                    [TOTAL_ACCURACY] => 37.7674
                                    [TOTAL_DEATHS] => 6106
                                    [TOTAL_KILLS] => 20436
                                    [COUNTRY] => Netherlands
                                    [USERNAME] => Pure
                                    [RANK] => 25
                                    [TOTAL_XP] => 89957
                                    [USER_ID] => 11080
                                )

                        )

                )

        )

)

Posted: Fri Nov 30, 2007 3:41 pm
by infolock
Assuming the array name containing the XML data is $xml_array, this might work for you...

Code: Select all

<?php
foreach($xml_array[0] as $key) {
  echo <<<EOD
           <br /> Name: {$key['name']}<br />
           Attributes:
           <ul>
            <li>Category : {$key['attrs']['CATEGORY']}</li>
            <li>Filter : {$key['attrs']['FILTER']}</li>
            <li>Stat : {$key['attrs']['STAT']}</li>
            <li>Page : {$key['attrs']['PAGE']}</li>
            <li>All Pages : {$key['attrs']['ALL_PAGES']}</li>
           </ul>
EOD;

  // Loop through the children
  foreach($key['child'] as $sub_key) {
    echo <<<EOD
      Name = {$sub_key['name']}<br />
      Attributes:<br />
      <ul>
        <li>Military Rank : {$sub_key['attrs']['MILITARY_KEY']}</li>
        <li>Total Accuracy : {$sub_key['attrs']['TOTAL_ACCURACY']}</li>
        <li>Total Deaths : {$sub_key['attrs']['TOTAL_DEATHS']}</li>
        <li>Total Kills : {$sub_key['attrs']['TOTAL_KILLS']}</li>
        <li>Country : {$sub_key['attrs']['COUNTRY']}</li>
        <li>Username : {$sub_key['attrs']['USERNAME']}</li>
        <li>Rank : {$sub_key['attrs']['RANK']}</li>
        <li>Total XP : {$sub_key['attrs']['TOTAL_XP']}</li>
        <li>User ID : {$sub_key['attrs']['USER_ID']}</li>
      </ul>
EOD;
  }
}
?>
It's a basic loop.. If you need more, work with it and post what you are having problems with.