File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang / foreachLoop.002.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, 6 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: Foreach loop tests - modifying the array during the loop.
    3: --FILE--
    4: <?php
    5: 
    6: echo "\nDirectly changing array values.\n";
    7: $a = array("original.1","original.2","original.3");
    8: foreach ($a as $k=>$v) {
    9: 	$a[$k]="changed.$k";
   10: 	var_dump($v);
   11: }
   12: var_dump($a);
   13: 
   14: echo "\nModifying the foreach \$value.\n";
   15: $a = array("original.1","original.2","original.3");
   16: foreach ($a as $k=>$v) {
   17: 	$v="changed.$k";
   18: }
   19: var_dump($a);
   20: 
   21: 
   22: echo "\nModifying the foreach &\$value.\n";
   23: $a = array("original.1","original.2","original.3");
   24: foreach ($a as $k=>&$v) {
   25: 	$v="changed.$k";
   26: }
   27: var_dump($a);
   28: 
   29: echo "\nPushing elements onto an unreferenced array.\n";
   30: $a = array("original.1","original.2","original.3");
   31: $counter=0;
   32: foreach ($a as $v) {
   33: 	array_push($a, "new.$counter");
   34: 
   35: 	//avoid infinite loop if test is failing
   36:     if ($counter++>10) {
   37:     	echo "Loop detected\n";
   38:     	break;    	
   39:     }
   40: }
   41: var_dump($a);
   42: 
   43: echo "\nPushing elements onto an unreferenced array, using &\$value.\n";
   44: $a = array("original.1","original.2","original.3");
   45: $counter=0;
   46: foreach ($a as &$v) {
   47: 	array_push($a, "new.$counter");
   48: 
   49: 	//avoid infinite loop if test is failing
   50:     if ($counter++>10) {
   51:     	echo "Loop detected\n";
   52:     	break;    	
   53:     }	
   54: }
   55: var_dump($a);
   56: 
   57: echo "\nPopping elements off an unreferenced array.\n";
   58: $a = array("original.1","original.2","original.3");
   59: foreach ($a as $v) {
   60: 	array_pop($a);
   61: 	var_dump($v);	
   62: }
   63: var_dump($a);
   64: 
   65: echo "\nPopping elements off an unreferenced array, using &\$value.\n";
   66: $a = array("original.1","original.2","original.3");
   67: foreach ($a as &$v) {
   68: 	array_pop($a);
   69: 	var_dump($v);
   70: }
   71: var_dump($a);
   72: 
   73: ?>
   74: --EXPECT--
   75: 
   76: Directly changing array values.
   77: string(10) "original.1"
   78: string(10) "original.2"
   79: string(10) "original.3"
   80: array(3) {
   81:   [0]=>
   82:   string(9) "changed.0"
   83:   [1]=>
   84:   string(9) "changed.1"
   85:   [2]=>
   86:   string(9) "changed.2"
   87: }
   88: 
   89: Modifying the foreach $value.
   90: array(3) {
   91:   [0]=>
   92:   string(10) "original.1"
   93:   [1]=>
   94:   string(10) "original.2"
   95:   [2]=>
   96:   string(10) "original.3"
   97: }
   98: 
   99: Modifying the foreach &$value.
  100: array(3) {
  101:   [0]=>
  102:   string(9) "changed.0"
  103:   [1]=>
  104:   string(9) "changed.1"
  105:   [2]=>
  106:   &string(9) "changed.2"
  107: }
  108: 
  109: Pushing elements onto an unreferenced array.
  110: array(6) {
  111:   [0]=>
  112:   string(10) "original.1"
  113:   [1]=>
  114:   string(10) "original.2"
  115:   [2]=>
  116:   string(10) "original.3"
  117:   [3]=>
  118:   string(5) "new.0"
  119:   [4]=>
  120:   string(5) "new.1"
  121:   [5]=>
  122:   string(5) "new.2"
  123: }
  124: 
  125: Pushing elements onto an unreferenced array, using &$value.
  126: Loop detected
  127: array(15) {
  128:   [0]=>
  129:   string(10) "original.1"
  130:   [1]=>
  131:   string(10) "original.2"
  132:   [2]=>
  133:   string(10) "original.3"
  134:   [3]=>
  135:   string(5) "new.0"
  136:   [4]=>
  137:   string(5) "new.1"
  138:   [5]=>
  139:   string(5) "new.2"
  140:   [6]=>
  141:   string(5) "new.3"
  142:   [7]=>
  143:   string(5) "new.4"
  144:   [8]=>
  145:   string(5) "new.5"
  146:   [9]=>
  147:   string(5) "new.6"
  148:   [10]=>
  149:   string(5) "new.7"
  150:   [11]=>
  151:   &string(5) "new.8"
  152:   [12]=>
  153:   string(5) "new.9"
  154:   [13]=>
  155:   string(6) "new.10"
  156:   [14]=>
  157:   string(6) "new.11"
  158: }
  159: 
  160: Popping elements off an unreferenced array.
  161: string(10) "original.1"
  162: string(10) "original.2"
  163: string(10) "original.3"
  164: array(0) {
  165: }
  166: 
  167: Popping elements off an unreferenced array, using &$value.
  168: string(10) "original.1"
  169: string(10) "original.2"
  170: array(1) {
  171:   [0]=>
  172:   string(10) "original.1"
  173: }

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