TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   General (http://www.talkphp.com/general/)
-   -   Filling an array with an array (http://www.talkphp.com/general/3202-filling-array-array.html)

benton 08-02-2008 03:13 AM

Filling an array with an array
 
I'm writing a script where the user can input certain items, which are then converted to php code and written to a file. A cron job will then be used to run that file. For the most part, it is all working fine but I am having problems get an array written correctly. Here is an example:

In the main code that displays for the user:
PHP Code:

//collect data from form
$data = array();
$data['name'] = 'some name';
$data['email'] = 'email address';
$data['options'] = array(=> "opt1",
                         
=> "opt2",
                         
=> "opt3");
$fp = array();
PrepareData($fp$data);
WriteFile($fp); 

For the PrepareFile function
PHP Code:

PrepareFile(&$fp$data) {
$fp[] = "\$name = " $data['name'] . "; \n";
$fp[] = "\$email = " $data['email'] . "; \n";

$fp[] = "\$db_query = mysql_query(\"select * from table\") or die(mysql_error());" "\n";
$fp[] = "while(\$db = mysql_fetch_array(\$db_query, MYSQL_ASSOC)) {" "\n";
$fp[] = "foreach (" $data['options'] . " as $option) {" "\n";
$fp[] = "\$message .= \$db[\$option] .'</tr></td>';" "\n";
}


The problem is with the line
PHP Code:

$fp[] = "foreach (" $data['options'] . " as $option) { 

When the written file is displayed, for that line it shows
PHP Code:

foreach (Array as $option) { 

The rest of the code is converted correctly. If I remove the foreach loop, the created file can be ran and the output is created as expected, using the complete code, of course. Can anyone see a problem with how I am doing this?

delayedinsanity 08-02-2008 04:31 AM

PHP Code:

$data['options']['name'] = 'some array name here';
$data['options']['array'] = array(=> "opt1"
                                  
=> "opt2"
                                  
=> "opt3"); 


sjaq 08-02-2008 08:56 AM

PHP Code:

$fp[] = "foreach (array('" implode(',\''$data['options']) . "') as $option) { 

or something like that

xenon 08-02-2008 09:32 AM

or, you could simply put the $data['options'] variable into the single quotes...I guess...assuming that you're evaluating the code after.

Kalle 08-02-2008 08:58 PM

Use serialization insted, much easier, but abit slower:

PHP Code:

$fp[] = "foreach (@unserialize('" str_replace('\'''\\\', serialize($data['options'])) . "') as $option) { 

Or something similar
=)

benton 08-05-2008 02:54 AM

I appreciate all of the suggestions though I wasn't able to get any to work.

1
Quote:

$data['options']['array'] = array(0 => "opt1",
1 => "opt2",
2 => "opt3");
I'm probably missing the point but if I can't get the code to run through a regular array, how will changing it to a multiarray help?

2
Quote:

$fp[] = "foreach (array('" . implode(',\'', $data['options']) . "') as $option) {

Changed to the following to get it to not fail:
$fp[] = "foreach (array('" . implode(',\'', $data['options']) . "') as \$option) {" . "\n";
This almost worked. The output was
PHP Code:

 foreach (array('opt1,'opt2') as $option) { 

I only used two options to test the above. Is there a way to surround each member of the array in single quotes since that seems to be the problem with it?

3
Quote:

put the $data['options'] variable into the single quotes
I'm not sure what was meant by this but if you mean something like
PHP Code:

$fp[] = "foreach (\$data['options'] as \$field ) {" "\n"

If I do that, the actual name shows in the output as
PHP Code:

foreach ($data['options'] as $field ) { 

But that won't work since that array is not known in the created file.

4
Quote:

$fp[] = "foreach (@unserialize('" . str_replace('\'', '\\\', serialize($data['options'])) . "') as $option) {
I couldn't get this to run due to parsing errors. I changed it to the following but it still fails.
PHP Code:

$fp[] = "foreach (@unserialize(str_replace('\'', '\\', serialize(" $data['options'] . ")) . ") as $option) {" . "\n"; 

I would apreciate any other suggestions.


All times are GMT. The time now is 02:07 AM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0