php数组值没有被推送到关联数组

时间:2014-05-23 16:48:00

标签: php arrays push associative

我写了一个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);

2 个答案:

答案 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;
}