By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
 459,200 Members | 1,593 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,200 IT Pros & Developers. It's quick & easy.

# array structure as with array_reverse preserve_keys

 P: n/a I have an array defined as follows: \$scores[2] = 19; \$scores[4] = 25; \$scores[2] = 23; \$scores[4] = 25; .... where the key is the team # and the value is the points. I am outputting the key/values as follows: foreach (\$scores as \$team => \$points) { echo "Team: \$team, Points: \$points, Difference: " . (\$scores[0] - \$scores[1]) . "
"; \$scores = array_reverse(\$scores, false); } Curent output (before array_reverse): Game 1 Team: 2, Points: 19, Difference: 0 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: 0 Team: 4, Points: 25, Difference: 2 A problem occurs when calculating the point "Difference". The first pass of the foreach loop (above) is incorrect, but the second pass is correct (below.) This is due from the use of the function array_reverse(). By setting the preserve_keys to false, the function changes the structure of the array. Desired output (after array_reverse): Game 1 Team: 2, Points: 19, Difference: -6 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: -2 Team: 4, Points: 25, Difference: 2 Question: how can the above array be structured like this from the start? Apr 18 '06 #1
Share this Question
3 Replies

 P: n/a Bosconian wrote: I have an array defined as follows: \$scores[2] = 19; \$scores[4] = 25; \$scores[2] = 23; \$scores[4] = 25; ... where the key is the team # and the value is the points. I am outputting the key/values as follows: foreach (\$scores as \$team => \$points) { echo "Team: \$team, Points: \$points, Difference: " . (\$scores[0] - \$scores[1]) . "
"; \$scores = array_reverse(\$scores, false); } Curent output (before array_reverse): Game 1 Team: 2, Points: 19, Difference: 0 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: 0 Team: 4, Points: 25, Difference: 2 A problem occurs when calculating the point "Difference". The first pass of the foreach loop (above) is incorrect, but the second pass is correct (below.) This is due from the use of the function array_reverse(). By setting the preserve_keys to false, the function changes the structure of the array. Desired output (after array_reverse): Game 1 Team: 2, Points: 19, Difference: -6 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: -2 Team: 4, Points: 25, Difference: 2 Question: how can the above array be structured like this from the start? Well, first of all: \$scores[2] = 19; \$scores[4] = 25; \$scores[2] = 23; \$scores[4] = 25; doesn't work. You have scores[2] contain both 19 and 23, which you can't do. Secondly, the line: echo "Team: \$team, Points: \$points, Difference: " . (\$scores[0] - \$scores[1]) . "
"; Would always print the difference between \$scores[0] and \$scores[1] - that is, -6. So - what's your real code look like? -- ================== Remove the "x" from my email address Jerry Stuckle JDS Computer Training Corp. js*******@attglobal.net ================== Apr 18 '06 #2

 P: n/a "Jerry Stuckle" wrote in message news:4_********************@comcast.com... Bosconian wrote: I have an array defined as follows: \$scores[2] = 19; \$scores[4] = 25; \$scores[2] = 23; \$scores[4] = 25; ... where the key is the team # and the value is the points. I am outputting the key/values as follows: foreach (\$scores as \$team => \$points) { echo "Team: \$team, Points: \$points, Difference: " . (\$scores[0] - \$scores[1]) . "
"; \$scores = array_reverse(\$scores, false); } Curent output (before array_reverse): Game 1 Team: 2, Points: 19, Difference: 0 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: 0 Team: 4, Points: 25, Difference: 2 A problem occurs when calculating the point "Difference". The first pass of the foreach loop (above) is incorrect, but the second pass is correct (below.) This is due from the use of the function array_reverse(). By setting the preserve_keys to false, the function changes the structure of the array. Desired output (after array_reverse): Game 1 Team: 2, Points: 19, Difference: -6 Team: 4, Points: 25, Difference: 6 Game 2 Team: 2, Points: 23, Difference: -2 Team: 4, Points: 25, Difference: 2 Question: how can the above array be structured like this from the start? Well, first of all: \$scores[2] = 19; \$scores[4] = 25; \$scores[2] = 23; \$scores[4] = 25; doesn't work. You have scores[2] contain both 19 and 23, which you can't do. Secondly, the line: echo "Team: \$team, Points: \$points, Difference: " . (\$scores[0] - \$scores[1]) . "
"; Would always print the difference between \$scores[0] and \$scores[1] - that is, -6. So - what's your real code look like? -- ================== Remove the "x" from my email address Jerry Stuckle JDS Computer Training Corp. js*******@attglobal.net ================== Indeed, \$scores[0] and \$scores[1] will equal -6 once the elements are properly defined, which was the thrust of my dilemma. The above example was meant to illustrate the values were being pushed. My bad. So \$scores[2][] = 19; \$scores[4][] = 25; \$scores[2][] = 23; \$scores[4][] = 25; resulting in \$scores[2][0] = 19; \$scores[4][0] = 25; \$scores[2][1] = 23; \$scores[4][1] = 25; ANYWAY, I managed to get everything sorted out once my keys and values were properly defined. Apr 18 '06 #3

 P: n/a I'm not sure this is what your looking for but here is what I came up with: 19, 4 => 25); \$scores[2]['2'] = 23;// Game Two Team 2 \$scores[2]['4'] = 25;// Game Two Team 4 // This is a two dimentional array where the primary key is the game number // and the second keys are the team # and the value is the points. //####################### // Output //####################### // walk through each game foreach (\$game as \$Key => \$Description){ echo "
".\$Description.":
"; // turn the \$scores[GameNumber] from an associated to a numerical array // (because we won't always know what the team number is) and put // the values into \$Score1 and \$Score2. list (\$Score1,\$Score2) = array_values(\$scores[\$Key]); // Calculate the difference \$Diff = abs(\$Score1-\$Score2); // walk through each score for the current game foreach (\$scores[\$Key] as \$team => \$points) { // show output for each team echo "Team: ".\$team.", Points: ".\$points.", Difference: ".\$Diff."
"; } } ?> ----------------------- Good Luck! Apr 18 '06 #4

### This discussion thread is closed

Replies have been disabled for this discussion.