PHP - 拉取数组并拆分字符串

时间:2016-06-16 19:37:23

标签: php

不确定如何正确标题,但这是我目前遇到的问题。我建立了一个购物车和结账系统,它在完成订单时将所有数据加载到数据库中。为了节省一些空间,我最初只存储了项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:我不确定如何通过每个一。谢谢。

4 个答案:

答案 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;
}

请参阅:https://3v4l.org/rBkXF

如果您需要变量而不是数组,可以使用$dbjunk = "Itemid:Quantity:Price:name, itemid2:quantity2:price2:name2"; $parsed = parseItems($dbjunk); print_r($parsed); ,就像这样..

list()

请参阅:https://3v4l.org/l4vsn

答案 1 :(得分:0)

了解First Normal Form。基本上,您希望在一个字段中存储一个值。所以,而不是:

shipping = "method:price"

你想要这样的东西:

shipping_method = "method"
shipping_price = "price"

不要关心自己 - 现在它基本上是免费的。

关于你删除的项目困境,你的初步实施是要走的路:

I stored just the item IDs originally

除了恢复这种技术,我还会推荐两件事:

  • 在项目表中添加一个布尔字段,以表示该项目当前是否可用。这为您提供了额外的功能,即无需删除/插入记录和更改ID即可打开/关闭项目。
  • 在删除项目之前,请检查是否已订购该项目。如果没有,可以删除。如果是这样,请将其停用。

答案 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;