PHP将字符串拆分两次

PHP将字符串拆分两次,php,mysql,Php,Mysql,我有一个带有事务字段的数据库,它显示了我网站上的产品。我试图开发一个管理界面,我可以看到的产品带来 绳子看起来像这样 37,2:27,1:5,3:94,10:49,15: 这基本上意味着客户订购的产品ID号为37,数量为2。在他们的交易中包括产品id 27和数量1等等 产品标识、订购数量:下一个产品标识、下一个订购数量 为了显示这些信息,我需要将其分解。我尝试过php爆炸,但遇到了一些问题。因此,我们需要在冒号:上拆分产品,并通过逗号拆分数量和id。字符串可以是一个产品,也可以是多个产品 有人有

我有一个带有事务字段的数据库,它显示了我网站上的产品。我试图开发一个管理界面,我可以看到的产品带来

绳子看起来像这样
37,2:27,1:5,3:94,10:49,15:

这基本上意味着客户订购的产品ID号为37,数量为2。在他们的交易中包括产品id 27和数量1等等

产品标识、订购数量:下一个产品标识、下一个订购数量

为了显示这些信息,我需要将其分解。我尝试过php爆炸,但遇到了一些问题。因此,我们需要在冒号
上拆分产品,并通过
逗号
拆分数量和id。字符串可以是一个产品,也可以是多个产品

有人有什么建议吗

$ids = '37,2:27,1:5,3:94,10:49,15';
$products = explode(':', $ids);
$productAndQuantity = array();
foreach ($products as $product) {
    $exploded = explode(',', $product);
    $productAndQuantity[$exploded[0]] = $exploded[1];
}
您将得到一个profact id-quantity数组


这种存储数据的方式不可扩展,而且容易出错。为什么不使用包含以下字段的表:userId、productId、quantity?

这里是我拼凑的一些东西-

$str = '37,2:27,1:5,3:94,10:49,15:';

$a = explode(':',$str); // split by colon ":"

$data = array(); 
foreach ($a as $product) {  // iterate over each product
    $item = explode(',',$product); // split product and quanitity
    $data[$item[0]] = array(  // use product_id [0] as array key
      'product_id'=>$item[0],
      'quantity'=>$item[1]
    );
}

// in this example there is a trailing colon - this removes it.    
array_pop($data);

print_r($data);


你基本上是在发明一种在一个字段中存储一个表的方法。只需使用一个常规表,将user\u id、product\u id和ordered\u quantity作为列。不要重新发明轮子。你是对的,我本可以做到的。但是,如果客户在我的网站上有两个不同的交易,我将不得不找到最新的交易,我将有进一步的复杂性。因此,这两种方法都可以很好地工作,除了这一种是少1个表关联一个order_id,这个问题也会得到解决。你让它听起来像很少的表本身是一个质量,绝对不是这样的——只要考虑数据规范化。此外,如果您希望用户在您的站点上有多个事务(正如您所提到的),您可能还需要一个额外的表。如果没有,我甚至不敢问你在考虑什么设计。此外,修改购物车、添加或删除项目需要你首先检索整个字符串,并对其进行大量缓慢的字符串操作。清点物品也是一项相当乏味的任务。如果使用适当的设计,这些任务都会简单得多。嗨,谢谢你的回答。我现在把它和其他信息很好地打印在一张表中:)
Array
(
    [37] => Array
        (
            [product_id] => 37
            [quantity] => 2
        )

    [27] => Array
        (
            [product_id] => 27
            [quantity] => 1
        )

    [5] => Array
        (
            [product_id] => 5
            [quantity] => 3
        )
    ...
)