如何从字符串中提取多个变量值(PHP)
例如:如何从字符串中提取多个变量值(PHP),php,arrays,string,Php,Arrays,String,例如: $string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')"; 我需要将与pkBrand关联的值(即9和70)放入一个数组中,以便在其他地方使用,并将pkCategory的值(即55和56)再次放入一个单独
$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')";
我需要将与pkBrand关联的值(即9和70)放入一个数组中,以便在其他地方使用,并将pkCategory的值(即55和56)再次放入一个单独的数组中,以便在其他地方使用
我该怎么做呢。也许你可以这样做:
$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')";
preg_match_all("/pr.pkBrand = (\d+)|pr.pkCategory = (\d+)/", $string, $matches, PREG_SET_ORDER);
$matches数组如下所示:
$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')";
preg_match_all("/pr.pkBrand = (\d+)|pr.pkCategory = (\d+)/", $string, $matches, PREG_SET_ORDER);
阵列4{
[0] =>
阵列2{
[0] =>
string14 pr.pkBrand=9
[1] =>
第19条
}
[1] =>
阵列2{
[0] =>
string15 pr.pkBrand=70
[1] =>
第2条70
}
[2] =>
阵列3{
[0] =>
string18 pr.pkCategory=55
[1] =>
string0
[2] =>
第2条55
}
[3] =>
阵列3{
[0] =>
string18 pr.pkCategory=56
[1] =>
string0
[2] =>
第2条56
}
}
然后,您可以从中提取所需的值。这不太简洁,但无论字段名称如何,它都可以工作:
<?php
$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')";
$newString=trim(str_replace(')','',str_replace('(','',str_replace('OR','',str_replace('AND','',$string)))));
$tab=explode('pr.',$newString);
foreach($tab as $value) {
$value=trim(str_replace(' ','',str_replace('\'','',$value)));
$tab2[]=$value;
}
/*echo '<pre>';
var_dump($tab2);
echo '</pre>';*/
$operators=['!=','<>','<','>','='];
foreach ($tab2 as $index=>$value) {
foreach ($operators as $operator) {
$found=0;
$explode=explode($operator,$value);
if (count($explode)==1) {}//not the good one
else {
$found=1;
break;
}
}
if ($found==1) $newTab[$explode[0]][$index]=$explode[1];
}
echo '<pre>';
var_dump($newTab);
echo '</pre>';
?>
您的代码给了我一个错误:解析错误:语法错误,在…中意外的“[”,对于这一行$operators=[”!=',,,,,,='];对我来说没有错误。您能给我完整的错误消息吗?解析错误:语法错误,在/Users/***/Sites/***/\u plugins/site pages/public/add-a-model-pages/manage-models中意外的“[”。第547行的php是$operators=['!=',,'='];好的,你肯定使用php,你是对的,服务器运行5.3.26,你修改后的代码运行了一段时间