【问题标题】:php array values not being pushed onto associative arrayphp数组值没有被推送到关联数组
【发布时间】: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


【解决方案1】:

这完全没有意义:

            $array_values['" . $variable . "'] = $parsedValue;

您实际上是在使用 " . $variable . " 作为数组键 - 请记住 ' 引用的字符串不扩展变量。

为什么不直接

$array_values[$variable] = $parsedValue

【讨论】:

  • 感谢您指出此错误。这确实是问题的一部分,这对于有经验的程序员来说可能很明显。哈哈。问题的另一部分是 echo 没有打印出我需要 print_r 的数组。非常感谢您的帮助。
【解决方案2】:

据我所知,这应该可以满足您的需求:

$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;
}

【讨论】:

  • 感谢您的回答。对不起,我现在必须从我的电脑前赶路。我会试试这个,明天回复你。我只想指出,如果 pair[1] 存在于循环的当前迭代中,我只想将键/值对添加到完成的数组中,因为在某些情况下它不存在。即在原始字符串中,您会发现 custom= 我还想通过遍历 pair[1] 的字符并用 ' ' 空格替换 '+' 并对字符串进行 urldecoding 来进一步解析 pair[1]。但我会试着用你给我的东西明天做这件事。谢谢一百万。
  • 感谢您的回答。是 print_r 帮助它工作。 echo 没有打印出数组。而且正如我在上面所说的,我想遍历每个元素中的值并将加号更改为空格,有效地对其进行解码,我找到了执行该 urldecode 的函数,所以我添加了我迭代的小循环而不是小循环通过每个字符。谢谢你的帮助。作为一个新手,我非常感谢:)哈哈,你可以在上面看到我的完整最终代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2011-03-13
  • 2022-01-16
相关资源
最近更新 更多