You are here:  » Cannot return array values from function


Cannot return array values from function

Submitted by msimonds on Tue, 2010-06-29 21:34 in

Here is my code:

$salesforce = array();
$salesforce = MagicParser_parse("string://".$content,"myRecordHandler","xml|SOAPENV:ENVELOPE/");
function myRecordHandler($record)
{
    // This is where you write your code to process each record, such as loading a database
    // You can display the record contents using PHP's internal print_r() function:
    //print_r($record);
    // The following code will print out each field in your sample data:
    /*print $record["SOAPENV:ENVELOPE"];
    print $record["SOAPENV:ENVELOPE-XMLNS:SOAPENV"];
    print $record["SOAPENV:ENVELOPE-XMLNS:XSD"];
    print $record["SOAPENV:ENVELOPE-XMLNS:XSI"];
    print $record["SOAPENV:BODY"];
    print $record["SOAPENV:BODY/AUTHENTICATE"];
    print $record["SOAPENV:BODY/AUTHENTICATE-XMLNS"];
    print $record["SOAPENV:BODY/AUTHENTICATE/USERNAME"];
    print $record["SOAPENV:BODY/AUTHENTICATE/PASSWORD"];
    print $record["SOAPENV:BODY/AUTHENTICATE/SOURCEIP"];*/
    $data = array();
    $data['username'] = $record["SOAPENV:BODY/AUTHENTICATE/USERNAME"];
    $data['password'] = $record["SOAPENV:BODY/AUTHENTICATE/PASSWORD"];
    $send = '<pre>' . print_r($data, true) . '</pre>';
    mail('{email saved}', 'data array', $send);
    return $data;
}

when i do a print_r on the $salesforce array it shows:

<pre>1</pre>

Why am I getting back a boolean, why not the $data array?

Please help!!

~Mike

Submitted by support on Wed, 2010-06-30 07:26

Hello Mike,

The return value from myRecordHandler is not actually the return value you get from MagicParser_parse() - which only returns boolean TRUE(1) for success, or FALSE(0) if an error occurred.

What you need to do is declare $salesforce as a global within myRecordHandler, and then copy $data into it at the end of your myRecordHandler function. Have a go with the following:

$salesforce = array();
MagicParser_parse("string://".$content,"myRecordHandler","xml|SOAPENV:ENVELOPE/");
function myRecordHandler($record)
{
    global $salesforce;
    // This is where you write your code to process each record, such as loading a database
    // You can display the record contents using PHP's internal print_r() function:
    //print_r($record);
    // The following code will print out each field in your sample data:
    /*print $record["SOAPENV:ENVELOPE"];
    print $record["SOAPENV:ENVELOPE-XMLNS:SOAPENV"];
    print $record["SOAPENV:ENVELOPE-XMLNS:XSD"];
    print $record["SOAPENV:ENVELOPE-XMLNS:XSI"];
    print $record["SOAPENV:BODY"];
    print $record["SOAPENV:BODY/AUTHENTICATE"];
    print $record["SOAPENV:BODY/AUTHENTICATE-XMLNS"];
    print $record["SOAPENV:BODY/AUTHENTICATE/USERNAME"];
    print $record["SOAPENV:BODY/AUTHENTICATE/PASSWORD"];
    print $record["SOAPENV:BODY/AUTHENTICATE/SOURCEIP"];*/
    $data = array();
    $data['username'] = $record["SOAPENV:BODY/AUTHENTICATE/USERNAME"];
    $data['password'] = $record["SOAPENV:BODY/AUTHENTICATE/PASSWORD"];
    $send = '<pre>' . print_r($data, true) . '</pre>';
    mail('{email saved}', 'data array', $send);
    $salesforce = $data;
}

Hope this helps!
All the best,
David.

Submitted by msimonds on Wed, 2010-06-30 12:47

Thanks David that is what I eventually did and it worked

Thanks for getting back to me so fast

~Mike