Re: Re: Setting a variable inside a function and making it global insideaninner function doesn't work?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Shawn McKenzie wrote:
Lamonte wrote:
Shawn McKenzie wrote:
Shawn McKenzie wrote:
Lamonte wrote:
Setting a variable inside a function and making it global inside an
inner function doesn't work?

Right well I have created this function:

[code]
function getForumChildrenTree( $id )
{
   $id = intval( $id );
   $treeResult = array(
       '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
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(
        'topics' => array(),
        'posts' => array(),
        'forums' => array(),
);

-Shawn
After a second look, probably a better alternate would be to have
applyForumChildrenTree() return the array, then use $treeResult =
applyForumChildrenTree( $id );

-Shawn

As I said in my first reply, its a "Recursive function".so I couldn't
return 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;
}

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux