Return to foreachLoop.002.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang |
1.1 ! misho 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: }