foreachLoop.009.phpt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. --TEST--
  2. Foreach loop tests - foreach operates on the original array if the array is referenced outside the loop.
  3. --FILE--
  4. <?php
  5. // From php.net/foreach:
  6. // "Unless the array is referenced, foreach operates on a copy of the specified array."
  7. echo "\nRemove elements from a referenced array during loop\n";
  8. $refedArray=array("original.0", "original.1", "original.2");
  9. $ref=&$refedArray;
  10. foreach ($refedArray as $k=>$v1) {
  11. array_pop($refedArray);
  12. echo "key: $k; value: $v1\n";
  13. }
  14. echo "\nRemove elements from a referenced array during loop, using &\$value\n";
  15. $refedArray=array("original.0", "original.1", "original.2");
  16. $ref=&$refedArray;
  17. foreach ($refedArray as $k=>&$v2) {
  18. array_pop($refedArray);
  19. echo "key: $k; value: $v2\n";
  20. }
  21. echo "\nAdd elements to a referenced array during loop\n";
  22. $refedArray=array("original.0", "original.1", "original.2");
  23. $ref=&$refedArray;
  24. $count=0;
  25. foreach ($refedArray as $k=>$v3) {
  26. array_push($refedArray, "new.$k");
  27. echo "key: $k; value: $v3\n";
  28. if ($count++>5) {
  29. echo "Loop detected, as expected.\n";
  30. break;
  31. }
  32. }
  33. echo "\nAdd elements to a referenced array during loop, using &\$value\n";
  34. $refedArray=array("original.0", "original.1", "original.2");
  35. $ref=&$refedArray;
  36. $count=0;
  37. foreach ($refedArray as $k=>&$v4) {
  38. array_push($refedArray, "new.$k");
  39. echo "key: $k; value: $v4\n";
  40. if ($count++>5) {
  41. echo "Loop detected, as expected.\n";
  42. break;
  43. }
  44. }
  45. ?>
  46. --EXPECT--
  47. Remove elements from a referenced array during loop
  48. key: 0; value: original.0
  49. key: 1; value: original.1
  50. key: 2; value: original.2
  51. Remove elements from a referenced array during loop, using &$value
  52. key: 0; value: original.0
  53. key: 1; value: original.1
  54. Add elements to a referenced array during loop
  55. key: 0; value: original.0
  56. key: 1; value: original.1
  57. key: 2; value: original.2
  58. Add elements to a referenced array during loop, using &$value
  59. key: 0; value: original.0
  60. key: 1; value: original.1
  61. key: 2; value: original.2
  62. key: 3; value: new.0
  63. key: 4; value: new.1
  64. key: 5; value: new.2
  65. key: 6; value: new.3
  66. Loop detected, as expected.