You are here: Re: Extending variable scope? (Related post at alt.php.mysql) « PHP Programming Language « IT news, forums, messages
Re: Extending variable scope? (Related post at alt.php.mysql)

Posted by strawberry on 11/04/06 17:54

Jerry Stuckle wrote:
> strawberry wrote:
> > In the function below, I'd like to extend the scope of the $table
> > variable such that, once assigned it would become available to other
> > parts of the function. I thought 'global $table;' would solve this but
> > it's clear that I'm misunderstanding $variable persistence. I posted a
> > similar enquiry over at alt.php.mysql, but I guess this is a more
> > appropriate forum because the problems I'm having relate to PHP.
> >
> > Any help appreciated.
> >
> > $function array_to_mysql($array) { //1 define the function
> > if(is_array($array)){ //2 if $array is indeed an array
> > foreach($array as $key=>$value){ //3 foreach key/value pair
> > within the array
> > if(is_array($value)){ //4 either the current value
> > is itself an array
> > array_to_mysql($value); //5 (so call this function again
> > to process that array)
> > } else { //6 or it isn't
> > if($key == 'name'){ //7 (in which case, if the key
> > paired with that value = 'name'
> > $table = $value; //8 then assign that value to
> > $table)
> > } elseif //9 or else
> > ($key == 'ID'){ //10 (if the key paired with
> > that value = 'ID'
> > $parent = $value;}else{ //11 then assign that value to
> > $parent
> > echo "INSERT INTO $table ($key) VALUES ('$value') ON DUPLICATE KEY
> > UPDATE <BR>\n";}
> > if(!is_null($parent)){ //13 Finally, if $parent is
> > assigned issue the following
> > echo "INSERT INTO $table (ID) VALUES ('$parent') ON DUPLICATE KEY
> > UPDATE<BR>\n";
> > }
> > }
> > }
> > }
> > }
> >
> > Apologies if the formatting gets stuffed up in the posting. TIA
> >
>
> Just define $table at the start of our function, i.e.
>
> function array_to_mysql($array) {
> $table = null;
>
> ...
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstucklex@attglobal.net
> ==================

Thanks Jerry - but I'm still a long way off

Here's a snippet from the array:
Note: This is one of 4 children of a parent task which has ID = 11

[3] =>
Array ( [name] => TASK
[attrs] =>
Array ( [ID] => 14
[NAME] => Task 2.4
[EXPAND] => true )
[children] =>
Array ( [0] =>
Array ( [name] => NOTES
[attrs] => Array ( )
[tagData] => Embedded devices, etc ) ) )

The statements echoed by the function look something like this:

INSERT INTO TASK (name) VALUES ('TASK') ON DUPLICATE KEY UPDATE
INSERT INTO (ID) VALUES ('14') ON DUPLICATE KEY UPDATE
INSERT INTO (ID) VALUES ('14') WHERE ID = 14
INSERT INTO (NAME) VALUES ('Task 2.4') ON DUPLICATE KEY UPDATE
INSERT INTO (ID) VALUES ('14') WHERE ID = 14
INSERT INTO (EXPAND) VALUES ('true') ON DUPLICATE KEY UPDATE
INSERT INTO (ID) VALUES ('14') WHERE ID = 14
INSERT INTO NOTES (name) VALUES ('NOTES') ON DUPLICATE KEY UPDATE
INSERT INTO NOTES (tagData) VALUES ('Embedded devices, etc') ON
DUPLICATE KEY UPDATE

and here's how I suppose it should look

INSERT INTO TASK (ID,NAME,EXPAND) VALUES ('14','Task 2.4','true') ON
DUPLICATE KEY UPDATE
INSERT INTO TASK (PARENT) VALUES ('11') WHERE ID = '14'

Even if we ignore the NOTES bit for the now (which I guess should be a
field within the TASK table) you can see there's a lot wrong with my
function!

So, I can see that to do it this way I'll need to sort out my logic,
and also implode the keys and values, something like:

foreach ($array as $key => $value)
$array[$key] = "'".str_replace("'", "\'",
stripslashes($value))."'";
$values = implode(", ", $value);

Again, any more nudges in the right direction greatly appreciated.

---
For continuity, here's the current incarnation of the function:

function array_to_mysql($array) { //1 define the function
$table = null; //2 define a persistent variable
if(is_array($array)){ //3 if $array is indeed an array
foreach($array as $key=>$value){ //4 foreach key/value pair within
the array
if(is_array($value)){ //5 either the current value is
itself an array
array_to_mysql($value); //6 (so call this function again
to process that array);
} else { //7 or it isn't
if($key == 'name'){ //8 (in which case, if the key
paired with that value = 'name'
$table = $value; //9 then assign that value to $table)
} elseif //10 or else
($key == 'ID'){ //11 (if the key paired with that
value = 'ID'
$parent = $value;
$condition = "WHERE ID = $value";} //12 then assign that
value to $parent

echo "INSERT INTO $table ($key) VALUES ('$value') ON DUPLICATE KEY
UPDATE <BR>\n";
if(!is_null($parent)){ //14 Finally, if $parent is
assigned issue the following
echo "INSERT INTO $table (ID) VALUES ('$parent') $condition<BR>\n";
}
}
}
}
}

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация