ID: 42177 User updated by: rl at ez dot no Reported By: rl at ez dot no Status: Open Bug Type: Arrays related Operating System: linux mandriva 2006 PHP Version: 4.4.7 New Comment:
let's continue // clear echo "<br>example 13"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = array(); $a1 = array_merge_recursive( $a1, $a2 ); $a1 = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // warning echo "<br>example 14"; $a1 = array(); $a2 = array( 'key1' => 1, 'key3' => 2 ); $a1 = array_merge_recursive( $a1, $a2 ); $a1 = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); why does example 14 generate a warning while example 13 does not? seems like if first parameter is empty then function array_merge_recursive just assigns first parameter variable to the second one and makes some internal marks about two arrays which point on the same data but actually are different for a enduser. but second call of array_merge_recursive does not know anything about it. or something like that... no matter, but these warnings are definitely incorrect. Previous Comments: ------------------------------------------------------------------------ [2007-08-02 12:24:08] rl at ez dot no Description: ------------ Just run the code below and please answer the question: Why those marked as 'warning' generate warning "array_merge_recursive(): recursion detected" while others marked as 'clear' do not? <? // clear echo "<br>example 1"; $a1 = array( 'a' => 1, 'b' => 2 ); $az = array_merge_recursive( $a1, $a1 ); unset( $a1, $a2 ); // clear echo "<br>example 2"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = $a1; $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // clear echo "<br>example 3"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // warning echo "<br>example 4"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a3 = $a1; $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // warning echo "<br>example 5"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a3 = $a2; $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // warning echo "<br>example 6"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = $a1; $a2[] = 3; // $a2['c'] = 3; - no matter, warning anyway $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // clear echo "<br>example 7"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a2[] = 3; $az = array_merge_recursive( $a1, $a2 ); unset( $a1, $a2 ); // warning echo "<br>example 8"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a3 = $a2; $az = array_merge_recursive( $a1, $a3 ); unset( $a1, $a2, $a3 ); // warning echo "<br>example 9"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = $a1; $a3 = & $a2; $az = array_merge_recursive( $a1, $a3 ); unset( $a1, $a2, $a3 ); // clear echo "<br>example 10"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a3 = & $a2; $az = array_merge_recursive( $a1, $a3 ); unset( $a1, $a2, $a3 ); // warning echo "<br>example 11"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = $a1; $a3 = $a2; $a3[] = 3; $az = array_merge_recursive( $a1, $a3 ); unset( $a1, $a2, $a3 ); // clear echo "<br>example 12"; $a1 = array( 'key1' => 1, 'key3' => 2 ); $a2 = & $a1; $a3 = & $a2; $a3[] = 3; $az = array_merge_recursive( $a1, $a3 ); unset( $a1, $a2, $a3 ); ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42177&edit=1