2012-07-14 59 views
-1

我有一个带有事务字段的数据库,它显示了在我的网站上带来的产品。我正在尝试开发一个管理界面,在那里我可以看到带来的产品。PHP分割字符串两次

的字符串看起来像 37,2:27,1:5,3:94,10:49,15:

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

product_id,ordered_quantity:nextproduct_id,next_orderedquantity

为了显示这些信息,我需要将其分解。我试过php爆炸,但有一些麻烦。所以我们需要拆分冒号:上的产品和comma的qty和id。该字符串可以是一个或多个产品。

任何人有任何建议吗?

+0

你基本上发明了储存的东西,可能已经在一个字段的表的方法。只需使用常规表格而不是user_id,product_id和ordered_quantity作为列。不要重新发明轮子。 – kba 2012-07-14 22:49:45

+0

你是对的,我可以做到。但是,如果客户在我的网站上有两个不同的交易,我会有更多的复杂情况,我不得不找到最新的一个。所以这两种方式都可以正常工作,除了这一个是少一个表 – JP29 2012-07-14 23:15:34

+0

关联一个order_id,那个问题也将被解决。你让它听起来像有几张表本身就是一种质量,这绝对不是这种情况 - 只是考虑数据规范化。此外,如果您希望用户在您的网站上进行多项交易(如您自己提及的),那么您可能还需要一张额外的表。如果没有,我甚至不敢问你在考虑什么样的设计。 – kba 2012-07-14 23:31:30

回答

2
$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]; 
} 

你得到一个profuct id - 数组数组。

这种存储数据的方式是不可扩展的并且容易出错。为什么不使用具有以下字段的表:userId,productId,数量?

+0

嗨感谢您的答案。我已经把它打印在一张桌子上,现在有了其他的信息:) – JP29 2012-07-14 22:52:26

-1

这里是我的东西扔在一起 -

$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); 

Array 
(
    [37] => Array 
     (
      [product_id] => 37 
      [quantity] => 2 
     ) 

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

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