RE: [PHP] Returning a value from a recursive function
| From: | Andy Crain | Date: | Wed, 22 Jan 2003 23:10:51 +0000 |
| Subject: | RE: [PHP] Returning a value from a recursive function | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-132706@lists.php.net to get a copy of this message | ||
Thanks very much, Brian.
Your response helped me find the answer. On the recursive call to
breadcrumbs(), the function wasn't actually returning anything to
itself. I replaced "breadcrumbs()" with "return breadcrumbs()" and
everything now works.
> -----Original Message-----
> From: Brian T. Allen [mailto:brian@gzmarketing.com]
> Sent: Wednesday, January 22, 2003 4:47 PM
> To: 'Andy Crain'; php-general@lists.php.net
> Subject: RE: [PHP] Returning a value from a recursive function
>
> I think it will work if you return true, and just modify the global
> variable (not try to output it).
>
> Then output it (or capture it to begin with ($total_count =
> OneHundred();) after the function is called.
>
> You could also pass the variable, rather than making it global
> (OneHundred("0") initially, and OneHundred($count) from within the
> function).
>
> For instance:
>
> <?php
>
> function OneHundred(){
> global $count;
>
> if($count < 100){
> $count++;
> OneHundred();
> }
>
> return true;
> }
>
> OneHundred();
>
> echo $count;
>
> ?>
>
>
> Hope that helps,
> Brian
>
> > -----Original Message-----
> > From: Andy Crain [mailto:apcrain@fuse.net]
> > Sent: Wednesday, January 22, 2003 1:23 PM
> > To: php-general@lists.php.net
> > Subject: [PHP] Returning a value from a recursive function
> >
> >
> > Everyone,
> >
> > I'm stumped by this, even after searching the archives and the web,
> > although I admit the solution likely is something very obvious.
> >
> >
> >
> > I've written a function to build a string of "breadcrumb" links for
a
> > web site directory similar to Yahoo, etc. It queries a
> > categories table
> > recursively until it reaches the root category, building a string of
> > categories from the current category all the way back up to root.
The
> > function seems to work fine if I output directly from it
> > using echo, but
> > if I instead try to return the string to the global scope and
> > then echo
> > it, I get nothing. The line where I use echo/return is
> > indicated below.
> >
> > Thanks,
> >
> > Andy
> >
> >
> >
> > function breadcrumbs($category_id=0,$mode='linked'){
> >
> > global $id_array,$name_array;
> >
> >
> >
> > static $counter = 0;
> >
> >
> >
> > if ($category_id == 0) {
> >
> > //once we're down to the root, build a return string
> >
> > if ($mode == 'linked') {
> >
> > $output = '<A HREF="' . $_SERVER['PHP_SELF'] .
'">HOME</A>';
> >
> > } else {
> >
> > $output = 'HOME';
> >
> > }
> >
> > while($counter > 0){
> >
> > if ($mode == 'linked') {
> >
> > $output .= ' > <A HREF="' .
> > $_SERVER['PHP_SELF'] .
> > '?category_id=' . array_pop($id_array) . '">' .
> > array_pop($name_array)
> > . '</A>';
> >
> > } else {
> >
> > $output .= ' > ' . array_pop($name_array);
> >
> > }
> >
> > $counter--;
> >
> > }
> >
> > return $output; /*<--------HERE: IF I SUBSTITUTE "ECHO" FOR
> > "RETURN", EVERYTHING WORKS; BUT WITH "RETURN", IT DOESN'T WORK*/
> >
> > } else {
> >
> > $sql = 'SELECT category_id, parent_cat, category_name FROM
> > web_categories WHERE category_id = ' . $category_id;
> >
> > $result = safe_query($sql);
> >
> > while($query_data = mysql_fetch_assoc($result)){
> >
> > $id_array[$counter] = $query_data['category_id'];
> >
> > $name_array[$counter] = $query_data['category_name'];
> >
> > //now, move one step up and make the current category the
> > previous parent
> >
> > $category_id = $query_data['parent_cat'];
> >
> > $counter++;
> >
> > breadcrumbs($category_id,$mode);
> >
> > }
> >
> > }
> >
> > }
> >
> >
> >
> > $show = breadcrumbs(9);
> >
> > echo $show;
> >
> >
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php