Page 1 of 1

Looping Through Nested Array

Posted: Thu Nov 15, 2007 8:00 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
                                )

                        )

                )

        )

)
Function I use:

Code: Select all

function fnGetTotals($arrData)
{
	foreach ($arrData[0]['child'] as $strKey =>$arrValues)
	{
		if ($arrValues['name']=='PLAYER')
		{
			return $arrValues['attrs'];
		}
	}
}
var_dump of results:

Code: Select all

array(9) { ["MILITARY_RANK"]=>  string(17) "Supreme Commander" ["TOTAL_ACCURACY"]=>  string(7) "37.1042" ["TOTAL_DEATHS"]=>  string(4) "7796" ["TOTAL_KILLS"]=>  string(5) "32450" ["COUNTRY"]=>  string(13) "United States" ["USERNAME"]=>  string(10) "MechanicaL" ["RANK"]=>  string(1) "1" ["TOTAL_XP"]=>  string(6) "136314" ["USER_ID"]=>  string(5) "25398" }
The problem is it only returns the first child node. I need a way to return all child nodes and its attributes. Can anyone help?

Posted: Thu Nov 15, 2007 8:19 pm
by Jonah Bron
Hmmm. I've never worked with nested arrays. I didn't know one could do that. Perhaps I can gleen from any assistance by a professional, also. :wink:

Posted: Thu Nov 15, 2007 9:39 pm
by John Cartwright
You kind of lost me, what exactly are you trying to return?

Posted: Thu Nov 15, 2007 9:45 pm
by tommyready
Ok,

If you look in the xml file there are multiple "Players". I want to get the attributes and their values. I'm using the xml to create a table of player data. So I need the values for each player in an array. I have a function that get what I need but it will one return the first player node.

Posted: Thu Nov 15, 2007 9:58 pm
by sunilbhatia79
Check this out:

Code: Select all

$array["sunil"] = "Bhatia";
$array[0] = array("one"=>"two",array(1,2,3,array(4,5,6)));
$array["sunil2"] = "Bhatia2";

processArray($array);

$count=0;

function processArray($array) {

	global $count;

	$count++; //this variable is for calculating tab space

	if(is_array($array) === true) {

		foreach($array as $key => $value) {
			if(is_array($array[$key]) === true) {
				processArray($array[$key]);				
			}
			else {
				for($i = 1 ; $i < $count ; $i++) echo "&nbsp;&nbsp;"; //change this to space ' ' if running from CLI
				echo $value."<br>";
			}
		}
	}

	$count--;
}