PHP 从字符串中获取整数
PHP get integer from string
我有一个庞大的数据库来存储客户的订单。
我必须按产品总销售额和产品品牌销售额创建报告(每月和每年)。
主要的问题是,在每个订单条目中,我都有一个名为 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"before"
你应该重组你的数据,这将是未来处理的一个痛苦。对于当前问题,您可以使用带 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+
)。波浪号只是分隔符,表示正则表达式的开始和结束位置。分隔符可以是任何东西,但如果在正则表达式中使用,则需要转义。
要获得 32,您可以将正则表达式与匹配组一起使用
<?php
Preg_match_all('#(\[?<productId>[0-9]{1,}\])#', $string, $matches).
这也适用于产品列表。
我有一个庞大的数据库来存储客户的订单。 我必须按产品总销售额和产品品牌销售额创建报告(每月和每年)。
主要的问题是,在每个订单条目中,我都有一个名为 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"before"你应该重组你的数据,这将是未来处理的一个痛苦。对于当前问题,您可以使用带 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+
)。波浪号只是分隔符,表示正则表达式的开始和结束位置。分隔符可以是任何东西,但如果在正则表达式中使用,则需要转义。
要获得 32,您可以将正则表达式与匹配组一起使用
<?php
Preg_match_all('#(\[?<productId>[0-9]{1,}\])#', $string, $matches).
这也适用于产品列表。