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
)
...
)