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

1.1       misho       1: --TEST--
                      2: Directly modifying an unreferenced array when foreach'ing over it.
                      3: --FILE--
                      4: <?php
                      5: 
                      6: define('MAX_LOOPS',5);
                      7: 
                      8: function withRefValue($elements, $transform) {
                      9:        echo "\n---( Array with $elements element(s): )---\n";
                     10:        //Build array:
                     11:        for ($i=0; $i<$elements; $i++) {
                     12:                $a[] = "v.$i";
                     13:        }
                     14:        $counter=0;
                     15:        
                     16:        echo "--> State of array before loop:\n";
                     17:        var_dump($a);
                     18:        
                     19:        echo "--> Do loop:\n";  
                     20:        foreach ($a as $k=>$v) {
                     21:                echo "     iteration $counter:  \$k=$k; \$v=$v\n";
                     22:                eval($transform);
                     23:                $counter++;
                     24:                if ($counter>MAX_LOOPS) {
                     25:                        echo "  ** Stuck in a loop! **\n";
                     26:                        break;
                     27:                }
                     28:        }
                     29:        
                     30:        echo "--> State of array after loop:\n";
                     31:        var_dump($a);
                     32: }
                     33: 
                     34: 
                     35: echo "\nPopping elements off end of an unreferenced array";
                     36: $transform = 'array_pop($a);';
                     37: withRefValue(1, $transform);
                     38: withRefValue(2, $transform);
                     39: withRefValue(3, $transform);
                     40: withRefValue(4, $transform);
                     41: 
                     42: echo "\n\n\nShift elements off start of an unreferenced array";
                     43: $transform = 'array_shift($a);';
                     44: withRefValue(1, $transform);
                     45: withRefValue(2, $transform);
                     46: withRefValue(3, $transform);
                     47: withRefValue(4, $transform);
                     48: 
                     49: echo "\n\n\nRemove current element of an unreferenced array";
                     50: $transform = 'unset($a[$k]);';
                     51: withRefValue(1, $transform);
                     52: withRefValue(2, $transform);
                     53: withRefValue(3, $transform);
                     54: withRefValue(4, $transform);
                     55: 
                     56: echo "\n\n\nAdding elements to the end of an unreferenced array";
                     57: $transform = 'array_push($a, "new.$counter");';
                     58: withRefValue(1, $transform);
                     59: withRefValue(2, $transform);
                     60: withRefValue(3, $transform);
                     61: withRefValue(4, $transform);
                     62: 
                     63: echo "\n\n\nAdding elements to the start of an unreferenced array";
                     64: $transform = 'array_unshift($a, "new.$counter");';
                     65: withRefValue(1, $transform);
                     66: withRefValue(2, $transform);
                     67: withRefValue(3, $transform);
                     68: withRefValue(4, $transform);
                     69: 
                     70: ?>
                     71: --EXPECTF--
                     72: 
                     73: Popping elements off end of an unreferenced array
                     74: ---( Array with 1 element(s): )---
                     75: --> State of array before loop:
                     76: array(1) {
                     77:   [0]=>
                     78:   string(3) "v.0"
                     79: }
                     80: --> Do loop:
                     81:      iteration 0:  $k=0; $v=v.0
                     82: --> State of array after loop:
                     83: array(0) {
                     84: }
                     85: 
                     86: ---( Array with 2 element(s): )---
                     87: --> State of array before loop:
                     88: array(2) {
                     89:   [0]=>
                     90:   string(3) "v.0"
                     91:   [1]=>
                     92:   string(3) "v.1"
                     93: }
                     94: --> Do loop:
                     95:      iteration 0:  $k=0; $v=v.0
                     96:      iteration 1:  $k=1; $v=v.1
                     97: --> State of array after loop:
                     98: array(0) {
                     99: }
                    100: 
                    101: ---( Array with 3 element(s): )---
                    102: --> State of array before loop:
                    103: array(3) {
                    104:   [0]=>
                    105:   string(3) "v.0"
                    106:   [1]=>
                    107:   string(3) "v.1"
                    108:   [2]=>
                    109:   string(3) "v.2"
                    110: }
                    111: --> Do loop:
                    112:      iteration 0:  $k=0; $v=v.0
                    113:      iteration 1:  $k=1; $v=v.1
                    114:      iteration 2:  $k=2; $v=v.2
                    115: --> State of array after loop:
                    116: array(0) {
                    117: }
                    118: 
                    119: ---( Array with 4 element(s): )---
                    120: --> State of array before loop:
                    121: array(4) {
                    122:   [0]=>
                    123:   string(3) "v.0"
                    124:   [1]=>
                    125:   string(3) "v.1"
                    126:   [2]=>
                    127:   string(3) "v.2"
                    128:   [3]=>
                    129:   string(3) "v.3"
                    130: }
                    131: --> Do loop:
                    132:      iteration 0:  $k=0; $v=v.0
                    133:      iteration 1:  $k=1; $v=v.1
                    134:      iteration 2:  $k=2; $v=v.2
                    135:      iteration 3:  $k=3; $v=v.3
                    136: --> State of array after loop:
                    137: array(0) {
                    138: }
                    139: 
                    140: 
                    141: 
                    142: Shift elements off start of an unreferenced array
                    143: ---( Array with 1 element(s): )---
                    144: --> State of array before loop:
                    145: array(1) {
                    146:   [0]=>
                    147:   string(3) "v.0"
                    148: }
                    149: --> Do loop:
                    150:      iteration 0:  $k=0; $v=v.0
                    151: --> State of array after loop:
                    152: array(0) {
                    153: }
                    154: 
                    155: ---( Array with 2 element(s): )---
                    156: --> State of array before loop:
                    157: array(2) {
                    158:   [0]=>
                    159:   string(3) "v.0"
                    160:   [1]=>
                    161:   string(3) "v.1"
                    162: }
                    163: --> Do loop:
                    164:      iteration 0:  $k=0; $v=v.0
                    165:      iteration 1:  $k=1; $v=v.1
                    166: --> State of array after loop:
                    167: array(0) {
                    168: }
                    169: 
                    170: ---( Array with 3 element(s): )---
                    171: --> State of array before loop:
                    172: array(3) {
                    173:   [0]=>
                    174:   string(3) "v.0"
                    175:   [1]=>
                    176:   string(3) "v.1"
                    177:   [2]=>
                    178:   string(3) "v.2"
                    179: }
                    180: --> Do loop:
                    181:      iteration 0:  $k=0; $v=v.0
                    182:      iteration 1:  $k=1; $v=v.1
                    183:      iteration 2:  $k=2; $v=v.2
                    184: --> State of array after loop:
                    185: array(0) {
                    186: }
                    187: 
                    188: ---( Array with 4 element(s): )---
                    189: --> State of array before loop:
                    190: array(4) {
                    191:   [0]=>
                    192:   string(3) "v.0"
                    193:   [1]=>
                    194:   string(3) "v.1"
                    195:   [2]=>
                    196:   string(3) "v.2"
                    197:   [3]=>
                    198:   string(3) "v.3"
                    199: }
                    200: --> Do loop:
                    201:      iteration 0:  $k=0; $v=v.0
                    202:      iteration 1:  $k=1; $v=v.1
                    203:      iteration 2:  $k=2; $v=v.2
                    204:      iteration 3:  $k=3; $v=v.3
                    205: --> State of array after loop:
                    206: array(0) {
                    207: }
                    208: 
                    209: 
                    210: 
                    211: Remove current element of an unreferenced array
                    212: ---( Array with 1 element(s): )---
                    213: --> State of array before loop:
                    214: array(1) {
                    215:   [0]=>
                    216:   string(3) "v.0"
                    217: }
                    218: --> Do loop:
                    219:      iteration 0:  $k=0; $v=v.0
                    220: --> State of array after loop:
                    221: array(0) {
                    222: }
                    223: 
                    224: ---( Array with 2 element(s): )---
                    225: --> State of array before loop:
                    226: array(2) {
                    227:   [0]=>
                    228:   string(3) "v.0"
                    229:   [1]=>
                    230:   string(3) "v.1"
                    231: }
                    232: --> Do loop:
                    233:      iteration 0:  $k=0; $v=v.0
                    234:      iteration 1:  $k=1; $v=v.1
                    235: --> State of array after loop:
                    236: array(0) {
                    237: }
                    238: 
                    239: ---( Array with 3 element(s): )---
                    240: --> State of array before loop:
                    241: array(3) {
                    242:   [0]=>
                    243:   string(3) "v.0"
                    244:   [1]=>
                    245:   string(3) "v.1"
                    246:   [2]=>
                    247:   string(3) "v.2"
                    248: }
                    249: --> Do loop:
                    250:      iteration 0:  $k=0; $v=v.0
                    251:      iteration 1:  $k=1; $v=v.1
                    252:      iteration 2:  $k=2; $v=v.2
                    253: --> State of array after loop:
                    254: array(0) {
                    255: }
                    256: 
                    257: ---( Array with 4 element(s): )---
                    258: --> State of array before loop:
                    259: array(4) {
                    260:   [0]=>
                    261:   string(3) "v.0"
                    262:   [1]=>
                    263:   string(3) "v.1"
                    264:   [2]=>
                    265:   string(3) "v.2"
                    266:   [3]=>
                    267:   string(3) "v.3"
                    268: }
                    269: --> Do loop:
                    270:      iteration 0:  $k=0; $v=v.0
                    271:      iteration 1:  $k=1; $v=v.1
                    272:      iteration 2:  $k=2; $v=v.2
                    273:      iteration 3:  $k=3; $v=v.3
                    274: --> State of array after loop:
                    275: array(0) {
                    276: }
                    277: 
                    278: 
                    279: 
                    280: Adding elements to the end of an unreferenced array
                    281: ---( Array with 1 element(s): )---
                    282: --> State of array before loop:
                    283: array(1) {
                    284:   [0]=>
                    285:   string(3) "v.0"
                    286: }
                    287: --> Do loop:
                    288:      iteration 0:  $k=0; $v=v.0
                    289: --> State of array after loop:
                    290: array(2) {
                    291:   [0]=>
                    292:   string(3) "v.0"
                    293:   [1]=>
                    294:   string(5) "new.0"
                    295: }
                    296: 
                    297: ---( Array with 2 element(s): )---
                    298: --> State of array before loop:
                    299: array(2) {
                    300:   [0]=>
                    301:   string(3) "v.0"
                    302:   [1]=>
                    303:   string(3) "v.1"
                    304: }
                    305: --> Do loop:
                    306:      iteration 0:  $k=0; $v=v.0
                    307:      iteration 1:  $k=1; $v=v.1
                    308: --> State of array after loop:
                    309: array(4) {
                    310:   [0]=>
                    311:   string(3) "v.0"
                    312:   [1]=>
                    313:   string(3) "v.1"
                    314:   [2]=>
                    315:   string(5) "new.0"
                    316:   [3]=>
                    317:   string(5) "new.1"
                    318: }
                    319: 
                    320: ---( Array with 3 element(s): )---
                    321: --> State of array before loop:
                    322: array(3) {
                    323:   [0]=>
                    324:   string(3) "v.0"
                    325:   [1]=>
                    326:   string(3) "v.1"
                    327:   [2]=>
                    328:   string(3) "v.2"
                    329: }
                    330: --> Do loop:
                    331:      iteration 0:  $k=0; $v=v.0
                    332:      iteration 1:  $k=1; $v=v.1
                    333:      iteration 2:  $k=2; $v=v.2
                    334: --> State of array after loop:
                    335: array(6) {
                    336:   [0]=>
                    337:   string(3) "v.0"
                    338:   [1]=>
                    339:   string(3) "v.1"
                    340:   [2]=>
                    341:   string(3) "v.2"
                    342:   [3]=>
                    343:   string(5) "new.0"
                    344:   [4]=>
                    345:   string(5) "new.1"
                    346:   [5]=>
                    347:   string(5) "new.2"
                    348: }
                    349: 
                    350: ---( Array with 4 element(s): )---
                    351: --> State of array before loop:
                    352: array(4) {
                    353:   [0]=>
                    354:   string(3) "v.0"
                    355:   [1]=>
                    356:   string(3) "v.1"
                    357:   [2]=>
                    358:   string(3) "v.2"
                    359:   [3]=>
                    360:   string(3) "v.3"
                    361: }
                    362: --> Do loop:
                    363:      iteration 0:  $k=0; $v=v.0
                    364:      iteration 1:  $k=1; $v=v.1
                    365:      iteration 2:  $k=2; $v=v.2
                    366:      iteration 3:  $k=3; $v=v.3
                    367: --> State of array after loop:
                    368: array(8) {
                    369:   [0]=>
                    370:   string(3) "v.0"
                    371:   [1]=>
                    372:   string(3) "v.1"
                    373:   [2]=>
                    374:   string(3) "v.2"
                    375:   [3]=>
                    376:   string(3) "v.3"
                    377:   [4]=>
                    378:   string(5) "new.0"
                    379:   [5]=>
                    380:   string(5) "new.1"
                    381:   [6]=>
                    382:   string(5) "new.2"
                    383:   [7]=>
                    384:   string(5) "new.3"
                    385: }
                    386: 
                    387: 
                    388: 
                    389: Adding elements to the start of an unreferenced array
                    390: ---( Array with 1 element(s): )---
                    391: --> State of array before loop:
                    392: array(1) {
                    393:   [0]=>
                    394:   string(3) "v.0"
                    395: }
                    396: --> Do loop:
                    397:      iteration 0:  $k=0; $v=v.0
                    398: --> State of array after loop:
                    399: array(2) {
                    400:   [0]=>
                    401:   string(5) "new.0"
                    402:   [1]=>
                    403:   string(3) "v.0"
                    404: }
                    405: 
                    406: ---( Array with 2 element(s): )---
                    407: --> State of array before loop:
                    408: array(2) {
                    409:   [0]=>
                    410:   string(3) "v.0"
                    411:   [1]=>
                    412:   string(3) "v.1"
                    413: }
                    414: --> Do loop:
                    415:      iteration 0:  $k=0; $v=v.0
                    416:      iteration 1:  $k=1; $v=v.1
                    417: --> State of array after loop:
                    418: array(4) {
                    419:   [0]=>
                    420:   string(5) "new.1"
                    421:   [1]=>
                    422:   string(5) "new.0"
                    423:   [2]=>
                    424:   string(3) "v.0"
                    425:   [3]=>
                    426:   string(3) "v.1"
                    427: }
                    428: 
                    429: ---( Array with 3 element(s): )---
                    430: --> State of array before loop:
                    431: array(3) {
                    432:   [0]=>
                    433:   string(3) "v.0"
                    434:   [1]=>
                    435:   string(3) "v.1"
                    436:   [2]=>
                    437:   string(3) "v.2"
                    438: }
                    439: --> Do loop:
                    440:      iteration 0:  $k=0; $v=v.0
                    441:      iteration 1:  $k=1; $v=v.1
                    442:      iteration 2:  $k=2; $v=v.2
                    443: --> State of array after loop:
                    444: array(6) {
                    445:   [0]=>
                    446:   string(5) "new.2"
                    447:   [1]=>
                    448:   string(5) "new.1"
                    449:   [2]=>
                    450:   string(5) "new.0"
                    451:   [3]=>
                    452:   string(3) "v.0"
                    453:   [4]=>
                    454:   string(3) "v.1"
                    455:   [5]=>
                    456:   string(3) "v.2"
                    457: }
                    458: 
                    459: ---( Array with 4 element(s): )---
                    460: --> State of array before loop:
                    461: array(4) {
                    462:   [0]=>
                    463:   string(3) "v.0"
                    464:   [1]=>
                    465:   string(3) "v.1"
                    466:   [2]=>
                    467:   string(3) "v.2"
                    468:   [3]=>
                    469:   string(3) "v.3"
                    470: }
                    471: --> Do loop:
                    472:      iteration 0:  $k=0; $v=v.0
                    473:      iteration 1:  $k=1; $v=v.1
                    474:      iteration 2:  $k=2; $v=v.2
                    475:      iteration 3:  $k=3; $v=v.3
                    476: --> State of array after loop:
                    477: array(8) {
                    478:   [0]=>
                    479:   string(5) "new.3"
                    480:   [1]=>
                    481:   string(5) "new.2"
                    482:   [2]=>
                    483:   string(5) "new.1"
                    484:   [3]=>
                    485:   string(5) "new.0"
                    486:   [4]=>
                    487:   string(3) "v.0"
                    488:   [5]=>
                    489:   string(3) "v.1"
                    490:   [6]=>
                    491:   string(3) "v.2"
                    492:   [7]=>
                    493:   string(3) "v.3"
                    494: }

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