PHP从字符串

时间:2015-06-05 20:56:03

标签: php mysql arrays string integer

我有一个庞大的数据库存储客户'命令。 我必须按产品总销售额和产品品牌销售额创建报告(每月和每年)。

主要的麻烦在于,在每个订单输入中,我都有一个名为items的列,它存储订购的产品信息,如:

  

[32](1 x 22 EUR)产品名称wxy
代码:XY
颜色:LRC Red Cherry   [42](1 x 33 EUR)产品名称fgh
代码:XY
颜色:粉红色[66](1 x   44 EUR)产品名称abc
代码:YU
颜色:LPK Pink [60](6 x 45 EUR)   prd name xyz
代码:XY [1965](1 x 32 EUR)产品名称   xyz
代码:XY
颜色:黄色[3413](1 x 74 EUR)产品名称   xyz
代码:XZ [22](2 x 85 EUR)产品名称zzz
代码:XY
颜色:   黑

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

知道我已经在while循环中选择了所有MySQL条目,我怎样才能获得每个订单条目的所有产品代码(在此示例中为:32,42,66 ......)在阵列中优先考虑?)

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

  

[32](1 x 22 EUR)产品名称wxy
代码:XY
颜色:LRC Red Cherry

注意:查看前两行,

之间有一个<br/>标记
  

WXY

  

代码

,但总有一个\ n&#34;之前&#34;每个[id]。

2 个答案:

答案 0 :(得分:2)

您应该对数据进行重组,这将是一个很难处理的问题。您可以使用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+内的所有数字([])拉出来。波浪号只是分隔符,表示正则表达式的开始和结束位置。分隔符可以是任何东西,但是如果在正则表达式中使用,则需要转义任何内容。

答案 1 :(得分:0)

要获得32,您可以将正则表达式与匹配的组

一起使用
<?php
Preg_match_all('#(\[?<productId>[0-9]{1,}\])#', $string, $matches). 

这也适用于产品清单。