更改cookie中特定值的最佳方法是什么?

时间:2011-05-14 19:59:49

标签: php jquery regex

我正在使用SimpleCart JS,我一直在为它编写优惠券代码扩展。由于SimpleCart使用DOM和cookie的组合来计算价格(我已经控制了这个问题的DOM部分),我必须更改cookie中的一组特定值,以便实际改变那些项目的价格。在输入优惠券之前,在购物车中。

以下是我的问题:如何更改此Cookie字符串中price=个变量的值?

这是SimpleCart创建的cookie:

ID = C4 ||量= 1个||名称= XS%20Shirt%20%28Green%29 ||价= 10 ++ ID = C5 ||量= 1个||名称= XS%20Shirt%20%28Royal %20Blue%29 ||价= 10 ++ ID = C6 ||量= 1个||名称=%20Book ||价格= 45.50

目前,我正在使用POST将其发送到PHP脚本,然后将其爆炸成阵列,但我无法找到一种隔离价格的方法,以便我可以用折扣修改它们。将价格与ID分开的++会让我失望。我确信Regex可以做到这一点,但我对它的所有尝试都失败了。

这是我目前用来处理字符串的PHP脚本:

$currentCookie = $_POST['currentCookie'];

$amount = $_POST['couponAmount'];   

$orderArray = explode('||',$currentCookie); 

print_r($orderArray);

鉴于上述字符串,此脚本将返回以下内容:

Array ( [0] => id=c4
[1] => quantity=1
[2] => name=XS%20Shirt%20%28Green%29
[3] => price=10++id=c5
[4] => quantity=1
[5] => name=XS%20Shirt%20%28Royal%20Blue%29
[6] => price=10++id=c6
[7] => quantity=1
[8] => name=%20Book
[9] => price=45.50 ) 

我需要根据$amount变量修改价格值。 $ _POST字符串如下所示:

?currentCookie=id=c4||quantity=1||name=XS%20Shirt%20%28Green%29||price=10++id=c5||quantity=1||name=XS%20Shirt%20%28Royal%20Blue%29||price=10++id=c6||quantity=1||name=%20Book||price=45.50&amount=10

目标是在$amount = 10时将所有价格降低10%。数学部分如下所示:

$newPrice = $currentPrice - ($amount / 100 * (currentPrice));

感谢回答者。这就是我最后做的事情:

    $currentCookie = $_POST['currentCookie'];

function applyDiscount($price){

    $couponAmount = $_POST['couponAmount'];

    $newPrice = $price - ($couponAmount / 100 * ($price));

    return round($newPrice, 2);

}

$orderArray = explode('||',$currentCookie);

$output = array();

$pricePattern = '/(price=)([^\+]*)/';

foreach($orderArray as $item){

$currentPrice = preg_match($pricePattern, $item, $matches);

    $newPrice = preg_replace($pricePattern, applyDiscount($matches[2]), $item);

    if ($matches){
    array_push($output, 'price='.$newPrice);
    } else {
        array_push($output, $item);
    }

}

$output = implode('||', $output);

echo $output;

这将获取传入的字符串,将其拆分为数组,搜索并修改价格(感谢@stema),然后替换价格变量。

将所有内容缝合在一起并发送回页面,其中jQuery将旧cookie替换为新cookie。

如果有人对此有更好或更优雅的解决方案,我真的很乐意听到它。这感觉很笨,但它确实有效。

1 个答案:

答案 0 :(得分:0)

您可以在此处找到价格

(price=)([^\+]*)

See it online here on Regexr

我将price=放在第1组中,将值放在第2组中。这里的技巧是匹配任何不是+的内容。当每个价格真正受到+或字符串末尾的限制时,这将有效。

然后,您可以使用$1NEWPRICE替换。