1

So, I created an array, by manually adding each entry:

$Sections[] = "A.1.4.1";//900 0 900 0 900 900 888 800 800 913 900 900 900
$Sections[] = "A.1.4.2.1";// 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 994 976 954 900 846 779 516 430 344 328 239 150
$Sections[] = "A.1.4.2.2";//900 900 900 900 900 900 900 900 900 900 850 800 750 700 650 600 550 500 376 356 336 227
$Sections[] = "A.1.4.2.3";//1000 1000 1000 1000 900 900 1000 1000 1000 1000 893 803 763 492 516 491 336 336 240 24
$Sections[] = "A.1.4.3";//1000 1000 879 588 560 366 192 867 807 665
$Sections[] = "A.1.4.4";//1000 1000 1000 1000 994 864 620 456 1000 1000 1000
$Sections[] = "A.1.5.1";//900 0 900 800 464
$Sections[] = "A.1.5.2";//a 1000 1000 846 240
$Sections[] = "A.1.5.2";//b 900 900 700 356 
$Sections[] = "A.1.5.3";//1000 879 192
$Sections[] = "A.1.5.4";//1012 922 456

//EU_A
$Sections[] = "A.2.5.1";//a 1048 1048 1048 1048 1004 800 576 378
$Sections[] = "A.2.5.1";//b 1048 1048 1048 1048 1004 820 592 384
$Sections[] = "A.2.5.2";//a 1048 1048  964  828  672 504 340 
$Sections[] = "A.2.5.2";//b 1048 1048  972  836  696 536 376
$Sections[] = "A.2.5.3";//a 1048 1048 1048 1048 1004 800 576 378
$Sections[] = "A.2.5.3";//b  944  944  944  944  944 820 592 384
$Sections[] = "A.2.5.3";//c 1048 1048 1048 1048 1004 820 592 384
$Sections[] = "A.2.5.4";//a 1048 1048 1048  910  776 560 308
$Sections[] = "A.2.5.4";//b  944  944  944  928  804 588 348
$Sections[] = "A.2.5.4";//c 1048 1048 1048  928  804 588 348
$Sections[] = "A.2.7.1";//   560  504  424  304  240 200
$Sections[] = "A.2.7.2";//   520  448  416  360  312 280

//EU_B
$Sections[] = "B.2.4.1";
$Sections[] = "B.2.4.1";
$Sections[] = "B.2.4.2";
$Sections[] = "B.2.4.2";
$Sections[] = "B.3.4.1";
$Sections[] = "B.3.4.1";
$Sections[] = "B.3.4.2";
$Sections[] = "B.3.4.2";

//TR-114
$Sections[] = "A.2.1";
$Sections[] = "A.2.2";

(You can feel free to ignore the comments, this was literally a cut and paste from my code)

The issue I have is that when I do

return $Sections;

and then try to reference any index, I get an error about it being uninitialized.

However, if I do

$return[] = $Sections;

return $return;

I am easily able to reference the indexes.

I've read the documentation for arrays thoroughly, but I do not understand why it does this. I know it works, I would just like to know why.

I can only assume that when the $Sections array is passed to the $return array, the indexes are somehow "refreshed" or "updated."

Edit: I forgot to mention that this is inside a function, that returns the array created inside. I'm sure everyone would have grasped that pretty quickly, what with the return statement and all

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Joshua
  • 4,270
  • 10
  • 42
  • 62
  • Show the code where you attempt to access the array by index, please. – Michael Berkowski Jul 25 '11 at 18:38
  • You are probably just using the return wrong. Can you show us the code _using_ the function & note the error & line on which it occurs? – Wrikken Jul 25 '11 at 18:38
  • Can you post the code outside of the function that produces the error? – Mike Jul 25 '11 at 18:38
  • Your "if I do" section just nests your array one level deeper. If that works, but the bare `return $Sections` doesn't, then it's a problem with how your calling code accesses the array, not the array itself. – Marc B Jul 25 '11 at 19:20

2 Answers2

3

If you are attempting to access the indices as $Sections["B.2.4.1"], that will not work as it's not how you've defined them. By using the [] syntax to append to the array, you are creating numeric indices.

Your array really looks like the following, with each [] appended to the end of the array with a numeric index:

$Sections[0] = "A.1.4.1";
$Sections[1] = "A.1.4.2.1";
 // etc
Michael Berkowski
  • 267,341
  • 46
  • 444
  • 390
1

You're not specifying indexes whatsoever in your code. The [] notation means that PHP will insert the element at the end of the array, and assign it a new numeric index.

Christopher Armstrong
  • 7,907
  • 2
  • 26
  • 28