我写了一个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
感谢您的所有答案和帮助。这是两件事的组合,导致它不能打印..首先是我的愚蠢的语法错误(在编程时只是新的哈哈,我不会进入我背后的逻辑,但它确实对我有意义哈哈){ {1}}更改为:
$array_values['" . $variable . "'] = $parsedValue;
它也是这条线
导致它无法打印的$array_values[$variable] = $parsedValue;
。
当我改变这个
echo "php array" . getValuesPhp($result_values);
它完美地感谢@ChrisWillard。所以这是我的最终代码。 @ChrisWillard答案和@Mark B以及@Jdo答案的组合。我还想首先检查对[1]是否存在并通过对[1]的每个字符更改任何&#39; +&#39;到一个空间&#39; &#39;如果它存在,以便用户可以阅读。现在我已经找到了为我这样做的功能哈哈。我确定这不是很多人的新信息,但对于那些不知道它是urldecode的人来说,你可以看到下面我已经注释掉了我不需要的循环(通过字符串更改加号值)而不是写了:print_r(getValuesPhp($result_values));
感谢您的所有帮助。
$finished_array[$key] = urldecode($value);
答案 0 :(得分:4)
这完全是非感性的:
$array_values['" . $variable . "'] = $parsedValue;
您确实使用" . $variable . "
作为数组键 - 请记住'
- 引用的字符串 NOT 扩展变量。
为什么不
$array_values[$variable] = $parsedValue
答案 1 :(得分:0)
从我可以收集到的内容中,这应该可以满足您的需求:
$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; ////Not sure what you're trying to do here
}
for($x=1; $x< count($pairs_array); $x++) {
$pair = explode("=",$pairs_array[$x]);
$key = $pair[0];
$value = $pair[1];
$finished_array[$key] = $value;
}
return $finished_array;
}