我有一个巨大的数据库来存储客户的订单。 我必须按产品总销售额和产品品牌销售额创建一份报告(每月和每年)。
主要的问题是,在每个订单条目中,我都有一个名为 items 的列,其中存储订购的产品信息,例如:
[32] (1 x 22 EUR) prod name wxy
Code:XY
Color:LRC Red Cherry [42] (1 x 33 EUR) prod name fgh
Code:XY
Color:pink [66] (1 x 44 EUR) prod name abc
Code:YU
Color:LPK Pink [60] (6 x 45 EUR) prd name xyz
Code:XY [1965] (1 x 32 EUR) prod name xyz
Code:XY
Color:Yellow [3413] (1 x 74 EUR) product name xyz
Code:XZ [22] (2 x 85 EUR) prod name zzz
Code:XY
Color: Black
主要优点是每行都用 \n
分隔。产品 ID 位于方括号中。
知道我已经选择了 while
中的所有 MySQL 条目循环,如何获取每个订单条目(最好是数组)的所有产品代码(在本例中:32、42、66、...)?
相反,如何从此字符串中仅获取值 32:
[32] (1 x 22 EUR) prod name wxy
Code:XY
Color:LRC Red Cherry
注意:查看前两行,有一个 <br/>
标签之间
wxy
和
Code
,但每个 [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 从字符串中获取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675665/