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

Php 什么';更改cookie中特定值的最佳方法是什么?,php,jquery,regex,Php,Jquery,Regex,我正在使用SimpleCart JS,并为其编写优惠券代码扩展。由于SimpleCart使用DOM和cookie的组合来计算价格(我已经控制了这个问题的DOM部分),因此我必须更改cookie中的一组特定值,以便在输入优惠券之前实际更改购物车中物品的价格 我的问题是:如何更改此cookie字符串中price=变量的值 以下是SimpleCart创建的cookie: id=c4 | | |数量=1 | |名称=XS%20衬衫%20%28绿色%29 | |价格=10++id=c5 | |数量=1 |

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

我的问题是:如何更改此cookie字符串中
price=
变量的值

以下是SimpleCart创建的cookie:

id=c4 | | |数量=1 | |名称=XS%20衬衫%20%28绿色%29 | |价格=10++id=c5 | |数量=1 | |名称=XS%20衬衫%20%28皇家%20蓝色%29 |价格=10++id=c6 | | |数量=1 |名称=%20书籍| |价格=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
变量修改价格值。$\u 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
$newPrice = $currentPrice - ($amount / 100 * (currentPrice));
目标是在
$amount=10
时,将所有价格降低10%。数学部分如下所示:

?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
$newPrice = $currentPrice - ($amount / 100 * (currentPrice));
感谢回答者。以下是我最后要做的: 这将获取传入字符串,将其拆分为一个数组,搜索并修改价格(感谢@stema),然后替换价格变量

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


如果有人对此有更好或更优雅的解决方案,我真的很想听听。这感觉很笨重,但很管用。

你可以在这里找到价格

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

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


然后,您可以替换为
$1NEWPRICE

请显示您已经拥有的代码。已更新以包含代码。如果您想回答评论,则需要添加前面带有@的名称(例如@Philippe Gerber),否则不会通知此人。这很好,谢谢。如何修改该值,然后在使用Regex找到该值后将其重新插入字符串中?我对它不是很熟悉,你的建议对我来说没有任何意义。@Carter,我不是php程序员,所以我不能给你详细的代码。对于php中的regex search replace,您有这个函数,也许您可以直接在replace选项中进行计算,我不知道。否则,您可以先使用
preg\u match
preg\u match\u all
(您将在$2中找到您的结果),然后进行计算,最后一步用您的结果替换preg\u。我了解了一些关于preg\u match的更多信息,并且我让它工作了。我根据问题进行了修改,以包含我现在正在使用的代码。非常感谢。@Carter,不客气。您可能会回答自己的问题,因此您应该将您的解决方案作为答案发布在此处,而不是在您的问题中。您也可以接受自己的答案,但当然您可以将问题保留一段时间,等待更好的答案(或者如果您愿意,您可以接受我的答案;-)