Annotation of embedaddon/php/tests/lang/foreachLoop.002.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Foreach loop tests - modifying the array during the loop.
                      3: --FILE--
                      4: <?php
                      5: 
                      6: echo "\nDirectly changing array values.\n";
                      7: $a = array("original.1","original.2","original.3");
                      8: foreach ($a as $k=>$v) {
                      9:        $a[$k]="changed.$k";
                     10:        var_dump($v);
                     11: }
                     12: var_dump($a);
                     13: 
                     14: echo "\nModifying the foreach \$value.\n";
                     15: $a = array("original.1","original.2","original.3");
                     16: foreach ($a as $k=>$v) {
                     17:        $v="changed.$k";
                     18: }
                     19: var_dump($a);
                     20: 
                     21: 
                     22: echo "\nModifying the foreach &\$value.\n";
                     23: $a = array("original.1","original.2","original.3");
                     24: foreach ($a as $k=>&$v) {
                     25:        $v="changed.$k";
                     26: }
                     27: var_dump($a);
                     28: 
                     29: echo "\nPushing elements onto an unreferenced array.\n";
                     30: $a = array("original.1","original.2","original.3");
                     31: $counter=0;
                     32: foreach ($a as $v) {
                     33:        array_push($a, "new.$counter");
                     34: 
                     35:        //avoid infinite loop if test is failing
                     36:     if ($counter++>10) {
                     37:        echo "Loop detected\n";
                     38:        break;          
                     39:     }
                     40: }
                     41: var_dump($a);
                     42: 
                     43: echo "\nPushing elements onto an unreferenced array, using &\$value.\n";
                     44: $a = array("original.1","original.2","original.3");
                     45: $counter=0;
                     46: foreach ($a as &$v) {
                     47:        array_push($a, "new.$counter");
                     48: 
                     49:        //avoid infinite loop if test is failing
                     50:     if ($counter++>10) {
                     51:        echo "Loop detected\n";
                     52:        break;          
                     53:     }  
                     54: }
                     55: var_dump($a);
                     56: 
                     57: echo "\nPopping elements off an unreferenced array.\n";
                     58: $a = array("original.1","original.2","original.3");
                     59: foreach ($a as $v) {
                     60:        array_pop($a);
                     61:        var_dump($v);   
                     62: }
                     63: var_dump($a);
                     64: 
                     65: echo "\nPopping elements off an unreferenced array, using &\$value.\n";
                     66: $a = array("original.1","original.2","original.3");
                     67: foreach ($a as &$v) {
                     68:        array_pop($a);
                     69:        var_dump($v);
                     70: }
                     71: var_dump($a);
                     72: 
                     73: ?>
                     74: --EXPECT--
                     75: 
                     76: Directly changing array values.
                     77: string(10) "original.1"
                     78: string(10) "original.2"
                     79: string(10) "original.3"
                     80: array(3) {
                     81:   [0]=>
                     82:   string(9) "changed.0"
                     83:   [1]=>
                     84:   string(9) "changed.1"
                     85:   [2]=>
                     86:   string(9) "changed.2"
                     87: }
                     88: 
                     89: Modifying the foreach $value.
                     90: array(3) {
                     91:   [0]=>
                     92:   string(10) "original.1"
                     93:   [1]=>
                     94:   string(10) "original.2"
                     95:   [2]=>
                     96:   string(10) "original.3"
                     97: }
                     98: 
                     99: Modifying the foreach &$value.
                    100: array(3) {
                    101:   [0]=>
                    102:   string(9) "changed.0"
                    103:   [1]=>
                    104:   string(9) "changed.1"
                    105:   [2]=>
                    106:   &string(9) "changed.2"
                    107: }
                    108: 
                    109: Pushing elements onto an unreferenced array.
                    110: array(6) {
                    111:   [0]=>
                    112:   string(10) "original.1"
                    113:   [1]=>
                    114:   string(10) "original.2"
                    115:   [2]=>
                    116:   string(10) "original.3"
                    117:   [3]=>
                    118:   string(5) "new.0"
                    119:   [4]=>
                    120:   string(5) "new.1"
                    121:   [5]=>
                    122:   string(5) "new.2"
                    123: }
                    124: 
                    125: Pushing elements onto an unreferenced array, using &$value.
                    126: Loop detected
                    127: array(15) {
                    128:   [0]=>
                    129:   string(10) "original.1"
                    130:   [1]=>
                    131:   string(10) "original.2"
                    132:   [2]=>
                    133:   string(10) "original.3"
                    134:   [3]=>
                    135:   string(5) "new.0"
                    136:   [4]=>
                    137:   string(5) "new.1"
                    138:   [5]=>
                    139:   string(5) "new.2"
                    140:   [6]=>
                    141:   string(5) "new.3"
                    142:   [7]=>
                    143:   string(5) "new.4"
                    144:   [8]=>
                    145:   string(5) "new.5"
                    146:   [9]=>
                    147:   string(5) "new.6"
                    148:   [10]=>
                    149:   string(5) "new.7"
                    150:   [11]=>
                    151:   &string(5) "new.8"
                    152:   [12]=>
                    153:   string(5) "new.9"
                    154:   [13]=>
                    155:   string(6) "new.10"
                    156:   [14]=>
                    157:   string(6) "new.11"
                    158: }
                    159: 
                    160: Popping elements off an unreferenced array.
                    161: string(10) "original.1"
                    162: string(10) "original.2"
                    163: string(10) "original.3"
                    164: array(0) {
                    165: }
                    166: 
                    167: Popping elements off an unreferenced array, using &$value.
                    168: string(10) "original.1"
                    169: string(10) "original.2"
                    170: array(1) {
                    171:   [0]=>
                    172:   string(10) "original.1"
                    173: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>