2010-03-11 88 views
0

我想要生成数组$ result_array。页面没有错误,但不起作用!如何从该数组的字符串表示生成数组?

不工作!

//BOF: Result Array 
$result_array = ''; 
$result_array .= '"messages" => "' . $errors .'",'; 
$result_array .= '"this_addr_type" => "' . (int)$_REQUEST['edit'] .'",'; 
if (ACCOUNT_GENDER == 'true') { 
$result_array .= '"gender_male" => "' . $male .'",'; 
$result_array .= '"gender_female" => "' . $female .'",'; 
} 
$result_array .= '"firstname" => "' . $entry['entry_firstname'] .'",'; 
$result_array .= '"lastname" => "' . $entry['entry_lastname'] .'",'; 
if (ACCOUNT_COMPANY == 'true') { 
$result_array .= '"company" => "' . $entry['entry_company'] .'",'; 
} 
$result_array .= '"street_address" => "' . $entry['entry_street_address'] .'",'; 
if (ACCOUNT_SUBURB == 'true') { 
$result_array .= '"suburb" => "' . $entry['entry_suburb'] .'",'; 
} 
$result_array .= '"postcode" => "' . $entry['entry_postcode'] .'",'; 
$result_array .= '"city" => "' . $entry['entry_city'] .'",'; 
if (ACCOUNT_STATE == 'true') { 
$result_array .= '"state" => "' . $entry['entry_state'] .'",'; 
} 
$result_array .= '"country" => "' . $entry['entry_country_id'] .'"'; 
//EOF: Result Array 

    $_RESULT = array($result_array); 

的作品

$_RESULT = array(
"this_addr_type" => (int)$_REQUEST['edit'], 
"gender_male" => $male, 
"gender_female" => $female, 
"firstname" => $entry["entry_firstname"], 
"lastname" => $entry["entry_lastname"], 
"company" => $entry["entry_company"], 
"street_address" => $entry["entry_street_address"], 
"suburb" => $entry["entry_suburb"], 
"postcode" => $entry["entry_postcode"], 
"city" => $entry["entry_city"], 
"state" => $entry["entry_state"], 
"country" => $entry["entry_country_id"] 
); 
+0

你可以运行的第一个字符串,虽然'eval'。不是我会建议这样一个粗糙,丑陋的东西,但它应该工作... – Rob 2010-03-11 18:23:55

+0

你为什么试图做到这一点,肯定有更好的方法来完成你所需要的... – mmattax 2010-03-11 19:39:18

回答

4

因为您试图让PHP将字符串视为代码。我的问题是“为什么” - 但是如果你必须这样做,你要找的eval:http://php.net/manual/en/function.eval.php

// untested 
$_RESULT = eval("return " . "array($result_array)" . ";"); 

可能会给你你正在寻找热塑成型的结果。

真正qusetion是你为什么不只是这样做:

if (ACCOUNT_GENDER == 'true') { 
$result_array['gender_male'] = $male; 
$result_array['gender_female'] = $female; 
} 
+0

数组仍然无法正常工作。 \t $ result_array。='“this_addr_type”=>'。 (int)$ _ REQUEST ['edit']。','; if(ACCOUNT_GENDER =='true'){ \t // $ result_array。='“gender_male”=>'。 $男性。''; \t // $ result_array。='“gender_female”=>'。 $女。','; } \t $ result_array。='“firstname”=>'。 $ entry ['entry_firstname']。','; \t $ result_array。='“lastname”=>'。 $ entry ['entry_lastname']。','; ................................. $ _RESULT = eval(“array($ result_array)”) ; – 2010-03-11 18:30:48

+0

@question_about_the_problem:你不应该用eval来做。使用Erik提出的另一种方式。除了是唯一正确的方式,它更便于阅读。 – 2010-03-11 18:39:47

+0

,因为当你创建你的字符串时,你没有引用值,你需要。例如,这是正确的: '$ result_array。=“'country'=>'{$ entry ['entry_country_id']}',”;' 请注意该值已被引用。 – Erik 2010-03-11 18:42:24

0

PHP不工作的方式。一个字符串并不总是等于你想要使用的实际东西。

0

第一个示例仅创建一个具有一个非常大的字符串的数组。 “=>”包含在该字符串中,不会被解释为创建新的数组元素。看第二个例子。引号内是否有“=>”?

0

你已经回答了你自己的问题。第一个不能工作。您只是创建一个长字符串,然后将该字符串作为单个元素粘贴到数组中。

但看你的两个例子,我想你想要做这样的事情:

$result_array = array(); 
if($somecondition) { 
    $result_array = array_merge($result_array, array("entry1" => "data1", "entry2" => "data2")); 
} 
if($someothercondition) { 
    $result_array = array_merge($result_array, array("other_entry" => "more_data")); 
} 
$_RESULT = $result_array; 
+0

谢谢,这是个好主意,这个解决方案正在工作中 – 2010-03-11 18:42:14

0

您可以创建PHP数组是这样的:

$array = array(); 

$array[] = 'whatever'; 

但在您的代码中,您正在使用:

$result_array .= '"messages" => "' . $errors .'",'; 

这不是如何创建PHP数组。

+0

是,因为我想要gererate数组,我知道我可以如何创建手动数组。 – 2010-03-11 18:32:57

0
//BOF: Result Array 
$_RESULT = array(); 
$_RESULT["messages"] = $errors; 
$_RESULT["this_addr_type"] = (int)$_REQUEST['edit']; 
if (ACCOUNT_GENDER == 'true') { 
    $_RESULT["gender_male"] = $male; 
    $_RESULT["gender_female"] = $female; 
} 
$_RESULT["firstname"] = $entry['entry_firstname']; 
$_RESULT["lastname"]  = $entry['entry_lastname']; 
if (ACCOUNT_COMPANY == 'true') { 
    $_RESULT["company"] = $entry['entry_company']; 
} 
$_RESULT["street_address"] = $entry['entry_street_address']; 
if (ACCOUNT_SUBURB == 'true') { 
    $_RESULT["suburb"]  = $entry['entry_suburb']; 
} 
$_RESULT["postcode"] = $entry['entry_postcode']; 
$_RESULT["city"]  = $entry['entry_city']; 
if (ACCOUNT_STATE == 'true') { 
    $_RESULT["state"] = $entry['entry_state']; 
} 
$_RESULT["country"] = $entry['entry_country_id']; 
//EOF: Result Array 
相关问题