Re: Re: Setting a variable inside a function and making it global insideaninner function doesn't work?
| From: | Lamonte | Date: | Wed, 12 Mar 2008 03:34:02 +0000 |
| Subject: | Re: Re: Setting a variable inside a function and making it global insideaninner function doesn't work? | ||
| References: | 1 2 3 4 5 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-271327@lists.php.net to get a copy of this message | ||
Shawn McKenzie wrote:
Lamonte wrote:After a second look, probably a better alternate would be to have applyForumChildrenTree() return the array, then use $treeResult = applyForumChildrenTree( $id ); -ShawnShawn McKenzie wrote:Well you haven't defined anything global in your code, unless you did inapplyForumChildrenTree(), in which case it needs to be global everywhere that you want to use it as global. Easiest way would just be to use it like this everywhere: $GLOBALS['treeResult'] = array(inner function doesn't work? Right well I have created this function: [code] function getForumChildrenTree( $id ) { $id = intval( $id ); $treeResult = array(Shawn McKenzie wrote:Lamonte wrote:Setting a variable inside a function and making it global inside an'topics' => array(), 'posts' => array(), 'forums' => array(),); applyForumChildrenTree( $id ); } [/code] What this function does: Basically this function is set to an id of a forum id, then theres a variable that stores an array. Then theres a recursive function called "applyForumChildrenTree" to update the "treeResult" variable, but it's not exactly working. For some reason when I did print_r inside the "applyForumChildrenTree" the array is as applied: [quote] Array ( [forums] => Array( [0] => 3 [1] => 8 [2] => 5 )[topics] => Array( [0] => 5 )[posts] => Array( [0] => 5 )) [/quote] Then inside the actual function "getForumChildrenTree" I tried outputting the "treeResult" array using "print_r" after the recursive function "applyForumChildrenTree" as follows: [code] function getForumChildrenTree( $id ) { $id = intval( $id ); $treeResult = array('topics' => array(), 'posts' => array(), 'forums' => array(),); applyForumChildrenTree( $id ); print_r($treeResult); } [/code] and it showed me a blank array, (default array I created) as follows: [quote] Array ( [topics] => Array( )[posts] => Array( )[forums] => Array( )) [/quote] Is this a bug? I'm using PHP 5.2.4'topics' => array(), 'posts' => array(), 'forums' => array(),); -Shawn
As I said in my first reply, its a "Recursive function".so I couldn'treturn the array.
Please reply to the list. Sure, your function can return an array if it's recursive. It returns it to itself and uses whatever logic you need to add to the current array or merge or remove or whatever. Regardless, I explained why you aren't seeing the vars as global and a better way to do it using the $GLOBALS array. I may be off but we would need to see the applyForumChildrenTree() to know. -Shawn Yep I'm using globals, thanks :). function getForumChildrenTree( $id ) { $id = intval( $id ); $GLOBALS['treeResult'] = array(
'topics' => array(),
'posts' => array(),
'forums' => array(),
);
applyForumChildrenTree( $id );
$treeResult = $GLOBALS['treeResult'];
unset($GLOBALS['treeResult']);
return $treeResult;
}