【发布时间】:2014-05-23 16:47:59
【问题描述】:
我写了一个 javascript 函数,它接收一个字符串并将其解析为一个关联数组。
function getValues(string){
var array_values = new Array();
var pairs_array = string.split('\n');
if(pairs_array[0] == 'SUCCESS'){
window.success = true;
}
for(x=1; x< pairs_array.length; x++){
var parsedValue = '';
//console.log(pairs_array[x] + "<br>");
var pair = pairs_array[x].split('=');
//console.log(pair[1]);
var variable = pair[0];
if(pair[1]){
var value = pair[1];
for(i=0; i< value.length; i++){
var character = value.charAt(i);
if(character == '+'){
parsedValue = parsedValue + character.replace('+', ' ');
}else{
parsedValue = parsedValue + value.charAt(i);
}
}
array_values[variable] = decodeURIComponent(parsedValue);
}else{
array_values[variable] = '';
}
}
return array_values;
}
然后在字符串window.name_value_pairs上调用函数如下
var array_callback = getValues(window.name_value_pairs);
for(x in array_callback){
console.log("call" + x + " " + array_callback[x]);
}
工作正常。现在我一直在尝试用 php 编写函数,因为我更喜欢在服务器端使用它,但它没有成功。我不确定数组值是否被推送到数组上,因为没有返回任何内容。这是我尝试过的php代码:
注意:$results_values 是一个字符串
$result_values = $_REQUEST['result_values'];
echo "php array " . getValuesPhp($result_values);
function getValuesPhp($string){
$array_values = array();
$pairs_array = explode("\n",$string);
if($pairs_array[0] == 'SUCCESS'){
$success = true;
echo "TRUE";
}
for($x=1; $x< count($pairs_array); $x++){
$parsedValue = '';
$pair = explode("=",$pairs_array[$x]);
$variable = $pair[0];
if(isset($pair[1])){
$value = $pair[1];
for($i=0; $i< strlen($value); $i++){
$character = $value[$i];
//echo "char \n" . $character;
if(strpos($character, '+') !== false){
//echo "plus";
$parsedValue .= str_replace('+', ' ', $character);
}else{
//echo "hi2";
$parsedValue .= $value[$i];
}
}
echo "\n var " . $variable;
echo "\n parsed " . $parsedValue;
$array_values['" . $variable . "'] = $parsedValue;
//echo "arrayValues " . $array_values['" . $variable . "'];
//array_push($GLOBALS[$array_values]['" . $variable . "'], $parsedValue);
}else{
$array_values['" . $variable . "'] = '';
//array_push($GLOBALS[$array_values]['" . $variable . "'], '');
}
}
//echo "array payment stat" . $array_values['payment_status'];
return $array_values;
}
注意:在上面写着$array_values['" . $variable . "'] 的地方确实会打印出写入结果,因为它会通过循环,但是看起来数组元素没有被添加到数组中,因为最后没有返回任何内容。
谢谢你的帮助
莎拉
更新:
@ChrisWillard 我想从字符串中返回一个关联数组。该字符串的格式为每行的格式为 key=value .. 它实际上是从 paypal pdt 响应返回的字符串。例如:
SUCCESS
mc_gross=3.00
protection_eligibility=Eligible
address_status=confirmed
item_number1=3
tax=0.00
item_number2=2
payer_id=VWCYB9FFJ
address_street=1+Main+Terrace
payment_date=14%3A26%3A14+May+22%2C+2014+PDT
payment_status=Completed
charset=windows-1252
address_zip=W12+4LQ
mc_shipping=0.00
mc_handling=0.00
first_name=Sam
address_country_code=GB
address_name=Sam+Monks
custom=
payer_status=verified
business=mon%40gmail.com
address_country=United+Kingdom
num_cart_items=2
mc_handling1=0.00
mc_handling2=0.00
address_city=Wolverhampton
payer_email=monks%40gmail.com
mc_shipping1=0.00
mc_shipping2=0.00
tax1=0.00
tax2=0.00
txn_id=3PX5572092U
payment_type=instant
last_name=Monks
address_state=West+Midlands
item_name1=Electro
receiver_email=mon%40gmail.com
item_name2=Dub
quantity1=1
quantity2=1
receiver_id=WHRPZLLP6
pending_reason=multi_currency
txn_type=cart
mc_gross_1=1.00
mc_currency=USD
mc_gross_2=2.00
residence_country=GB
transaction_subject=
payment_gross=3.00
感谢您的所有回答和帮助。这是导致它无法打印的两件事的结合。首先是我愚蠢的语法错误(只是编程的新手哈哈,我不会深入探讨我背后的逻辑,但当时对我来说确实有意义哈哈)@ 987654328@改为:
$array_values[$variable] = $parsedValue;
这也是一条线
echo "php array" . getValuesPhp($result_values); 导致它无法打印。
当我将其更改为
print_r(getValuesPhp($result_values)); 它打印得非常完美,感谢@ChrisWillard。所以这是我的最终代码。 @ChrisWillard 答案和@Mark B 和@Jdo 答案的组合。我还想先检查 pair[1] 是否存在,然后遍历 pair[1] 的每个字符,如果存在的话,将任何“+”更改为空格“”,以便用户可以阅读。现在我找到了为我做这件事的功能哈哈。我敢肯定这对你们很多人来说不是新信息,但对于任何不知道它是 urldecode 的人来说,所以你可以在下面看到我注释掉了我不需要的循环(通过字符串的字符更改加值),而不是我写的:$finished_array[$key] = urldecode($value); 感谢您的所有帮助。
$result_values = $_REQUEST['result_values'];
print_r(getValuesPhp($result_values));
function getValuesPhp($string){
$finished_array = array();
$pairs_array = explode("\n",$string);
if($pairs_array[0] == 'SUCCESS'){
$success = true;
//echo "TRUE";
}
for($x=1; $x< count($pairs_array); $x++){
$parsedValue = '';
$pair = explode("=",$pairs_array[$x]);
$key = $pair[0];
if(isset($pair[1])){
$value = $pair[1];
//for($i=0; $i< strlen($value); $i++){
//$character = $value[$i];
//if(strpos($character, '+') !== false){
//$parsedValue .= str_replace('+', ' ', $character);
//}else{
//$parsedValue .= $value[$i];
//}
//}
$finished_array[$key] = urldecode($value);
}else{
$finished_array[$key] = '';
}
}
return $finished_array;
}
【问题讨论】:
-
那行没有语法错误?请改用
array_values[$variable] = $parsedValue;。 -
你想从 getValuesPhp 函数返回一个数组还是一个字符串?看起来您正在构建一个数组,但您正在回显返回值。执行 print_r(getValuesPhp($result_values)); 时会得到什么?
-
请给出一个示例(源)字符串。
-
@jdo 谢谢。不,我没有收到语法错误,它打印出正确的值,但我已经尝试了你的建议,它也打印出正确的,如下所示: $array_values[$variable] = $parsedValue;回声“数组值”。 $array_values[$变量];但我还有最后一个问题。
-
你真的应该打开'error_repoting'。
标签: php arrays push associative