基于结合了变量的变量搜索爆炸的字符串

时间:2018-08-27 12:02:38

标签: php arrays sorting

在我的数据库中,有一个名为“ 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.

目前,我只是停留在数组搜索中,将不胜感激。

3 个答案:

答案 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
//           ____ 

https://3v4l.org/XHDXH

正则表达式模式:

"/          // 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