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

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

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