不确定如何正确标题,但这是我目前遇到的问题。我建立了一个购物车和结账系统,它在完成订单时将所有数据加载到数据库中。为了节省一些空间,我最初只存储了项ID,但后来我遇到了问题,如果我从数据库中删除了项目(因为它已经停止或其他),那么它就不会返回我需要的信息。如果他们订购了超过1项,那么数据库记录就错了。所以我存储了这样的数据:
Itemid:Quantity:Price:name, itemid2:quantity2:price2:name2
OR
1:3:20.00:Flower Hat, 2:1:17.75:diamonds
我现在需要帮助的问题是这个。我需要将这四个值分成$price
,$item
,$id
,$ammount
等变量,以便我可以在订单历史记录页面上显示它们,我需要遍历所有数组上的项目,因此我可以为每个项目打印一行,其中包含与该项目相对应的所有四个字段。
我已经使用strpos从相同的数据库字段获取送货信息,格式为METHOD:Price,但因为我的字符串上有3:我不确定如何通过每个一。谢谢。
答案 0 :(得分:1)
这是一个功能
A(1,2)
使用示例:
function parseItems($dbjunk){
$cart = array();
$items = explode(",",$dbjunk);
foreach($items as $i){
$chunks = explode(":", $i);
$cart[] = array(
"ItemID" => $chunks[0] ,
"Quantity" => $chunks[1] ,
"Price" => $chunks[2] ,
"name" => $chunks[3]
);
}
return $cart;
}
如果您需要变量而不是数组,可以使用$dbjunk = "Itemid:Quantity:Price:name, itemid2:quantity2:price2:name2";
$parsed = parseItems($dbjunk);
print_r($parsed);
,就像这样..
list()
答案 1 :(得分:0)
了解First Normal Form。基本上,您希望在一个字段中存储一个值。所以,而不是:
shipping = "method:price"
你想要这样的东西:
shipping_method = "method"
shipping_price = "price"
不要关心自己 - 现在它基本上是免费的。
关于你删除的项目困境,你的初步实施是要走的路:
I stored just the item IDs originally
除了恢复这种技术,我还会推荐两件事:
答案 2 :(得分:0)
您不应该从物理上删除数据库中的项目。相反,请添加一个名为' is_active'的新列。或类似的东西,以表明产品是活动/非删除。 回答你的问题,这是我的建议:
$orderString = '1:3:20.00:Flower Hat, 2:1:17.75:diamonds';
$items = array();
foreach(explode(', ', $orderString) as $itemString) {
$itemData = explode(':', $itemString);
$items[] = array(
'id' => $itemData[0],
'amount' => $itemData[1],
'value' => $itemData[2],
'description' => $itemData[3]
);
}
使用此代码,无论字符串中有多少项,您都将获得一个包含字符串中所有项数据的数组
答案 3 :(得分:0)
尝试类似
的内容$data = 1:3:20.00:Flower Hat, 2:1:17.75:diamonds
list($price, $item, $uid, $id, $ammount) = explode(":", $data);
echo $user;
echo $item;