Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        4年前关闭。
                                                                                            
                
        
我有一个庞大的数据库,用于存储客户的订单。
我必须创建按产品总销售量和产品品牌销售量划分的报告(每月和每年)。

主要的麻烦是,在每个订单条目中,我都有一个名为items的列,该列存储订购的产品信息,例如:


  [32](1 x 22 EUR)产品名称wxyCode:XYColor:LRC红樱桃
  [42](1 x 33 EUR)产品名称fghCode:XYColor:pink [66](1 x
  44欧元)产品名称abcCode:YUColor:LPK粉色[60](6 x 45 EUR)
  产品名称xyzCode:XY [1965](1 x 32 EUR)产品名称
  xyzCode:XYColor:Yellow [3413](1 x 74 EUR)产品名称
  xyzCode:XZ [22](2 x 85 EUR)产品名称zzzCode:XYColor:
  黑色


主要优点是每行用\n分隔,产品ID在方括号中。

知道我已经在while循环中选择了所有MySQL条目,如何获得每个订单条目(数组中的首选)的所有产品代码(在此示例中:32、42、66,...)?

相反,如何从此字符串中仅获取值32:


  [32](1 x 22 EUR)产品名称wxyCode:XYColor:LRC红樱桃


注意:查看前两行,之间有一个<br/>标记


  x





  码


,但每个[id]总是有一个\ n“在”之前。

最佳答案

您应该重组数据,这在将来会很麻烦。您可以在当前问题中使用带preg_match_all的正则表达式。

<?php
$string = '[32] (1 x 22 LEI) prod name wxy
Code:XY
Color:LRC Red Cherry [42] (1 x 33 LEI) prod name fgh
Code:XY
Color:pink [66] (1 x 44 LEI) prod name abc
Code:YU
Color:LPK Pink [60] (6 x 45 LEI) prd name xyz
Code:XY [1965] (1 x 32 LEI) prod name xyz
Code:XY
Color:Yellow [3413] (1 x 74 LEI) product name xyz
Code:XZ [22] (2 x 85 LEI) prod name zzz
Code:XY
Color: Black';
preg_match_all('~\[(\d+)\]~', $string, $ids);
print_r($ids[1]);


输出:

Array
(
    [0] => 32
    [1] => 42
    [2] => 66
    [3] => 60
    [4] => 1965
    [5] => 3413
    [6] => 22
)


此正则表达式提取\d+中的所有数字([])。波浪号只是分隔符,用于说明正则表达式的开始和结束位置。分隔符可以是任何东西,但如果在正则表达式中使用,则需要转义任何使用的东西。

关于php - PHP从字符串获取整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30675665/

10-10 04:52