【问题标题】:PHP Regex pattern needed for MySQL database manupilationMySQL 数据库操作所需的 PHP 正则表达式模式
【发布时间】:2011-11-17 00:58:17
【问题描述】:

我的表中有一些列,descriptions 列包含一些信息,例如:

a1b01,Value 1,2,1,60|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20

使用 SQL 命令,我需要更新它。

如果第一个参数和第二个参数同时存在于当前记录中(在描述列中),我将使用 PHP 函数进行更新。

例如:如果用户想要更改包含a1b01,Value 1 的描述值,我将执行这样的SQL 命令;

function do_action ($code,$value,$new1,$new2,$newresult) {
UPDATE the_table SET descriptions = REPLACE(descriptions, $code.','.$value.'*', $code.','.$value.','.$new1.','.$new2.','.$newresult)";
}
  • (星号)表示,这些部分是未知的(这就是我需要正则表达式的原因)

我的问题是:我怎样才能得到

a1b01,Value 1,2,1,60| 

下面的字符串部分

a1b01,Value 1,2,1,60|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20 

通过正则表达式,但a1b01Value 1 应该作为参数获取。

我只是想要那个;当我这样打电话给do_action时;

do_action ("a1b01","Value 1",2,3,25);

记录将是:a1b01,Value 1,2,3,25|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20
第一部分已更新...

【问题讨论】:

标签: php regex database denormalized


【解决方案1】:

您不一定需要使用正则表达式来执行此操作,您可以使用explode 函数,因为它都是分隔的

所以你可以这样做:

$descriptionArray = explode('|', $descriptions); //creates array of the a1b01,Value 1,2,1,60 block
//then for each description explode on ,
for($i = 0; i < count($descriptionArray); $i++){
    $parameters = explode(',', $descriptionArray[$i]); 
    do_action ($parameters[0],$parameters[1],$parameters[2],$parameters[3],$parameters[4]);
} 

【讨论】:

  • 我正要写同样的代码块,赞 - 赞成票
  • 如果不需要并且我理解修改后的逻辑,您可以不做循环并使其成为$descriptionArray[0] ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多