在我的数据库中,有一个名为“ Cart”的字符串。
$cart = "1+10,2+10,3+10,5+10,6+10"
$openCart = explode(",", $cart);
在$ openCart内,我想先搜索数字和加号,然后再向该数组添加新信息。 我尝试了 array_search 和 in_array ,但都没有让我搜索“ 3+”之类的值。 array_search只允许我搜索完整的字符串,例如“ 3 + 10”,而当我在加号上结束搜索字符串时,in_array不喜欢它。
其他上下文: 最后,此功能的理想代码将位于以下位置:
$pID = 3;
$pOrder = 4;
$openCart = explode(',', $cart);
//Search where $pID . "+" matches a value inside $openCart
$specProd = explode ('+' $openCart[/*Location that got matched*/]);
$specProd[1] = $specProd[1] + $pOrder;
$impProd = implode ('+', $specProd);
$specProd[] = impProd;
$newCart = implode (',', $specProd[]);
//upload the string of $newCart back to the database.
目前,我只是停留在数组搜索中,将不胜感激。
答案 0 :(得分:0)
它找到元素的键
<?php
$cart = "1+10,2+10,3+10,5+10,6+10";
$openCart = explode(",", $cart);
$needle = "3+";
$return = array_keys(array_filter($openCart, function($var) use ($needle){
return strpos($var, $needle) !== false;
}));
if(!empty($return)){
// do something
}
答案 1 :(得分:0)
现在,我对某些功能进行了修补,但从我即将发布此内容之前的评论来看,应该有一种更简单的方法。
无论如何,这是我自己想出的。
$Cart = '1+10,2+10,3+10,5+10,6+10';
$pID = 3;
$pString = $pID . "+";
$pOrder = 5;
$pLoc;
echo $Cart;
echo "<br/>";
$openCart = explode (",", $Cart);
$cartLenght = count($openCart);
for ($i = 0; $i<$cartLenght; $i++){
$pos = stripos($openCart[$i], $pString);
if ($pos !== false){
$pLoc = $i;
}
}
$specProd = explode ('+', $openCart[$pLoc]);
$specProd[1] = $specProd[1] + $pOrder;
$impProd = implode('+', $specProd);
$openCart[$pLoc] = $impProd;
$finalCart = implode(",", $openCart);
echo $finalCart;
结果: 购物车:1 + 10,2 + 10,3 + 10,5 + 10,6 + 10 finalCart:1 + 10,2 + 10,3 + 15,5 + 10,6 + 10
答案 2 :(得分:0)
我认为将其作为字符串处理是最有效的方法。
如果首先爆炸,则需要循环或正则表达式数组的每个项目。
此方法使用preg_replace_callback来查找模式,并根据您要执行的操作返回字符串。
在这种情况下,我们需要找到产品并将更改添加到+号后面的数字中。
$cart = "1+10,2+10,3+10,5+10,6+10";
$product = 3;
$change = 5;
$finalcart = preg_replace_callback("/(.*" .$product . "\+)(\d+)(.*)/", function($m) use($change){
return $m[1] . ($m[2]+$change) . $m[3];
}, $cart);
echo $finalcart;
// 1+10,2+10,3+15,5+10,6+10
// ____
正则表达式模式:
"/ // start of pattern
(.*" // capture anything
.$product . // including the product
"\+) // and a litteral + to $m[1]
(\d+) // capture a number to $m[2] (the amount)
(.*) // and capture again anything, to $m[3]
/" // end of pattern
然后在回调函数中使用它来将$m[2]
更改为+$change
,然后返回到$finalcart