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

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

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