0

我在 PHP 中有一个数组字符串,其中包含如下内容:

$a = array(
  array('inner' => 'N.person = P.id'),
  array('inner' => 'L.person = P.id'),
  array('left' => 'A.person = P.id AND A.excluded IS NULL')
);

我想通知主键P.id并从 sql 中删除所有别名,结果如下:

$x = someFunctionThatSanitizeSQL('P.id', $a); 

print_r$x结果:

array(
  array('inner' => 'person = :pk'),
  array('inner' => 'person = :pk'),
  array('left' => 'person = :pk AND excluded IS NULL')
);

提前致谢

@edit:错过了一个错字

4

1 回答 1

1

完成后str_replace($pkreplace, ':pk', $mystring);,我认为您正在寻找的正则表达式类似于:

/(?=(^|\w))[A-Z0-9_-]+\./

例如,要清除每个字符串,您可以执行

preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $mystring);

但是,如果您要删除A.L.等,则由于值不再位于数据库表下并可能导致不明确的值错误,您的查询可能会出现其他问题。您确定这是您在查询中想要的行为吗?

编辑

您的函数的最终实现类似于(假设您需要数组):

function someFunctionThatSanitizeSQL($pkreplace, $dataarray) {
  if (!is_array($dataarray))
    return null;
  $retval = array();
  foreach ($dataarray as $key => & $curentry) {
    $curstring = str_replace($pkreplace, ':pk', $curentry);
    $curstring = preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $curstring);
    $retval[$key] = $curstring;
  }
  return $retval;
}
于 2013-03-17T18:07:39.267 回答