Annotation of embedaddon/php/tests/lang/foreachLoop.009.phpt, revision 1.1.1.1

1.1       misho       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: 
                      8: echo "\nRemove elements from a referenced array during loop\n";
                      9: $refedArray=array("original.0", "original.1", "original.2");
                     10: $ref=&$refedArray;
                     11: foreach ($refedArray as $k=>$v1) {
                     12:        array_pop($refedArray);
                     13:        echo "key: $k; value: $v1\n";
                     14: }
                     15: 
                     16: echo "\nRemove elements from a referenced array during loop, using &\$value\n";
                     17: $refedArray=array("original.0", "original.1", "original.2");
                     18: $ref=&$refedArray;
                     19: foreach ($refedArray as $k=>&$v2) {
                     20:        array_pop($refedArray);
                     21:        echo "key: $k; value: $v2\n";
                     22: }
                     23: 
                     24: echo "\nAdd elements to a referenced array during loop\n";
                     25: $refedArray=array("original.0", "original.1", "original.2");
                     26: $ref=&$refedArray;
                     27: $count=0;
                     28: foreach ($refedArray as $k=>$v3) {
                     29:        array_push($refedArray, "new.$k");
                     30:        echo "key: $k; value: $v3\n";
                     31:        
                     32:        if ($count++>5) {
                     33:                echo "Loop detected, as expected.\n";
                     34:                break;
                     35:        }
                     36: }
                     37: 
                     38: echo "\nAdd elements to a referenced array during loop, using &\$value\n";
                     39: $refedArray=array("original.0", "original.1", "original.2");
                     40: $ref=&$refedArray;
                     41: $count=0;
                     42: foreach ($refedArray as $k=>&$v4) {
                     43:        array_push($refedArray, "new.$k");
                     44:        echo "key: $k; value: $v4\n";
                     45:        
                     46:        if ($count++>5) {
                     47:                echo "Loop detected, as expected.\n";
                     48:                break;
                     49:        }
                     50: }
                     51: 
                     52: ?>
                     53: --EXPECT--
                     54: 
                     55: Remove elements from a referenced array during loop
                     56: key: 0; value: original.0
                     57: key: 1; value: original.1
                     58: 
                     59: Remove elements from a referenced array during loop, using &$value
                     60: key: 0; value: original.0
                     61: key: 1; value: original.1
                     62: 
                     63: Add elements to a referenced array during loop
                     64: key: 0; value: original.0
                     65: key: 1; value: original.1
                     66: key: 2; value: original.2
                     67: key: 3; value: new.0
                     68: key: 4; value: new.1
                     69: key: 5; value: new.2
                     70: key: 6; value: new.3
                     71: Loop detected, as expected.
                     72: 
                     73: Add elements to a referenced array during loop, using &$value
                     74: key: 0; value: original.0
                     75: key: 1; value: original.1
                     76: key: 2; value: original.2
                     77: key: 3; value: new.0
                     78: key: 4; value: new.1
                     79: key: 5; value: new.2
                     80: key: 6; value: new.3
                     81: Loop detected, as expected.
                     82: 

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