ID: 20525 Comment by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Feedback Bug Type: Variables related Operating System: Windows 2000 PHP Version: 4.2.3 New Comment:
Script was already included. Just cut and paste the PHP code into a text editor and save. Then run. The script will cycle through and array, building objects out of the array. It dumps the values of the objects at certain steps. You will see the difference if you follow the instructions below. Run Script once and look at output. You will notice that the dump of the B class will contain repeat elements (actually, it seems to contain only the last element of the array that was visited). Edit Script, deleting the & symbol where I have placed a comment (***NOTE). Run Script and look at output. You will see the output is as you would expect. Thanks. If you need more info, you can go to my website www.goldparrot.com and get my contact information to call me. Thanks again. Previous Comments: ------------------------------------------------------------------------ [2002-11-21 02:40:36] [EMAIL PROTECTED] can you please submit a short script along with some explaination what it does, what not and what it should do in your opinion. Also make sure you have read http://www.php.net/manual/en/language.references.php and notice that the & works slightly different than in C. ------------------------------------------------------------------------ [2002-11-20 17:55:08] [EMAIL PROTECTED] The variable reference is not working as I would understand it should. The example that follows is long, but just cut and paste then read the output. Years of "C" programming says this should work. Try example first then, look for the following lines in the code: //*****NOTE****JUST DELETE THE & symbol TO MAKE WORK and remove the & symbol to see the correct output. CODE STARTS HERE ********************************************************** <?php class A { var $name; var $order; } class B { var $name; var $list_array; } class C_LIST { var $c_list; function print_test($call,$cname) { // call: the variable you want to print_r // cname: the label for your debugging output echo $cname . ":<pre>"; print_r($call); if ( is_array($call)) { reset($call); } echo "</pre><hr>"; } function test() { //new instantiated array in memory $local_c_list = array(); //array indicies for $i = 0; $j = 0; //array indicies for $x (see below) $k = 0; $x = array(0 => array(0 => "A_First", 1 => "B_First", 2 => 1), 1 => array(0 => "A_First", 1 => "B_Second", 2 => 2), 2 => array(0 => "A_First", 1 => "B_Third",2 => 3), 3 => array(0 => "A_Second",1 => "B_First",2 => 1), 4 => array(0 => "A_Second",1 => "B_Second",2 => 2), 5 => array(0 => "A_Second",1 => "B_Third",2 => 3) ); //loop through in array of x, e.g. x[0][$l] for ($k = 0; $k < 6; $k = $k + 1) { $b_name = $x[$k][0]; $a_name = $x[$k][1]; $a_order = $x[$k][2]; if ((!isset($b)) || (!isset($b->name)) || ($b_name != $b->name)) { //attach the A record to the main list // starting on the second A record found if (isset($b->name)) { //set the local_list to the reference of b //this avoids memory copies //*****NOTE****JUST DELETE THE & symbol TO MAKE WORK $local_c_list[$i] = &$b; $i = $i + 1; $j = 0; } $b = new B(); $b->name = $b_name; $b->list_array = array(); $this->print_test($b,"An element"); } //end if no B exists or we are beginning another B name //Create new A record $a = new A(); $a->name = $a_name; $a->order = $a_order; $this->print_test($a,"An item"); //Set $b->list_array[$a->order] = &$a -- the reference of $a //*****NOTE****JUST DELETE THE & symbol TO MAKE WORK $b->list_array[$j] = &$a; $j = $j + 1; $this->print_test($b,"A list"); } //end for k loops $this->c_list = $local_c_list; return; } //end test } //end class $the_list = new C_LIST(); $the_list->test(); $the_list->print_test($the_list,"Test"); ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=20525&edit=1