File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang / foreachLoop.014.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, 4 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 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>