File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang / foreachLoop.013.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:48:06 2012 UTC (12 years, 5 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

    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>