我有一个庞大的数据库存储客户'命令。 我必须按产品总销售额和产品品牌销售额创建报告(每月和每年)。
主要的麻烦在于,在每个订单输入中,我都有一个名为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]。
答案 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).
这也适用于产品清单。