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

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

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