如何在PHP中从字符串中提取度量名称
我有一个数组形式的提要,其中包含构造区域如何在PHP中从字符串中提取度量名称,php,string,Php,String,我有一个数组形式的提要,其中包含构造区域 $x['AC']="25"; 有时,它会将测量值附加在字符串本身中 $x['AC']="25mt2"; or $x['AC']="25 mt2"; or $x['AC']="25m2"; $x['AC']="25ht2"; or $x['AC']="25 ht2"; or $x['AC']="25h2"; 我怎样才能检测到这一点,然后将数组的值清除为刚好的数字呢。 一旦检测到它,我必须创建一个字符串 mt2[;;;]25 or h
$x['AC']="25";
有时,它会将测量值附加在字符串本身中
$x['AC']="25mt2"; or $x['AC']="25 mt2"; or $x['AC']="25m2";
$x['AC']="25ht2"; or $x['AC']="25 ht2"; or $x['AC']="25h2";
我怎样才能检测到这一点,然后将数组的值清除为刚好的数字呢。
一旦检测到它,我必须创建一个字符串
mt2[;;;]25 or ht2[;;;]25
提前感谢我会使用preg删除除数字以外的其他字符:
$x['AC'] = preg_replace('/\D+/','',$x['AC']);
但是除了您引用的25之外,我会留下任何附加值,但是如果25是第一个数字,我会使用preg来获取字符串中的第一个数字:
if(!is_numeric($x['AC'])){
preg_match('/^\d+/',$x['AC'],$nr);
$x['AC'] = $nr[0];
}
为了获得内部mt或ht,我将修改正则表达式,如:
if(!is_numeric($x['AC'])){
preg_match('/^(\d+)\s?(.*)$/',$x['AC'],$nr);
$x['AC'] = $nr[1];
$mtORht = $nr[2];
}
好的,正在恢复,因此m2是默认值,对于任何其他您希望在数组中创建具有该值的变量:
好的,还有浮点值:
if(!is_numeric($x['AC'])){
preg_match('/^([0-9\.]+)\s?(.*)$/',$x['AC'],$nr); //$x['AC']="25 ht2"
$theValue = $nr[1]; //25
$theMeasurementName = $nr[2]; //ht2
//creating the variable:
if(!stristr($theMeasurementName, 'm')){ // if no "m" is found, the m you wish to omit.
${$theMeasurementName} = $theValue; // $ht2[] = 25
}
}
我将使用preg删除除数字以外的其他字符:
$x['AC'] = preg_replace('/\D+/','',$x['AC']);
但是除了您引用的25之外,我会留下任何附加值,但是如果25是第一个数字,我会使用preg来获取字符串中的第一个数字:
if(!is_numeric($x['AC'])){
preg_match('/^\d+/',$x['AC'],$nr);
$x['AC'] = $nr[0];
}
为了获得内部mt或ht,我将修改正则表达式,如:
if(!is_numeric($x['AC'])){
preg_match('/^(\d+)\s?(.*)$/',$x['AC'],$nr);
$x['AC'] = $nr[1];
$mtORht = $nr[2];
}
好的,正在恢复,因此m2是默认值,对于任何其他您希望在数组中创建具有该值的变量:
好的,还有浮点值:
if(!is_numeric($x['AC'])){
preg_match('/^([0-9\.]+)\s?(.*)$/',$x['AC'],$nr); //$x['AC']="25 ht2"
$theValue = $nr[1]; //25
$theMeasurementName = $nr[2]; //ht2
//creating the variable:
if(!stristr($theMeasurementName, 'm')){ // if no "m" is found, the m you wish to omit.
${$theMeasurementName} = $theValue; // $ht2[] = 25
}
}
您可以将其强制转换为整数,如果存在非数值,它将被截断,如下所示:
$x['AC'] = (int) $x['AC'];
输入/输出示例:
25 -> 25
25mt2 -> 25
25ht2 -> 25
25 mt2 -> 25
25 ht2 -> 25
25m2 -> 25
25h2 -> 25
编辑:
根据您更新的问题,您可以使用创建字符串:
preg_match("/^(\d+)\s*(.*?)$/", $x["AC"], $m);
echo (empty($m[2])?"m2":$m[2]) . "[;;;;]" . $m[1];
您可以将其强制转换为整数,如果存在非数值,它将被截断,如下所示:
$x['AC'] = (int) $x['AC'];
输入/输出示例:
25 -> 25
25mt2 -> 25
25ht2 -> 25
25 mt2 -> 25
25 ht2 -> 25
25m2 -> 25
25h2 -> 25
编辑:
根据您更新的问题,您可以使用创建字符串:
preg_match("/^(\d+)\s*(.*?)$/", $x["AC"], $m);
echo (empty($m[2])?"m2":$m[2]) . "[;;;;]" . $m[1];
正则表达式:
->以开头^
->任何重复的数字\d+
->以开头^
->任何重复的数字\d+
m2[;;;]25或ht2[;;;;;]25
@Vikram,我不清楚您试图实现什么,您希望得到“mt”或ht“或者数字之间的任何字符?@lonut实际上我已经根据数组中提供的度量值创建了字符串,比如如果没有度量值,那么默认情况下我必须使用m2,否则,我必须使用在array@lonut对于浮点值,我应该在脚本中更改什么我在这里测试了它,但它显示错误result@lonut这没关系,但我必须检测测量的类型,并使用它形成一个字符串,如m2[;;;;;]25或ht2[;;;;]25
@Vikram,我不清楚你想要完成什么,你希望得到“mt”或ht“或者数字之间的任何字符?@lonut实际上我已经根据数组中提供的度量值创建了字符串,比如如果没有度量值,那么默认情况下我必须使用m2,否则,我必须使用在array@lonut对于浮点值,我应该在脚本中更改什么?我在这里测试了它,但它显示了错误的结果。我更新了我的问题。请看一看,我正在尝试使用数组中提供的度量值创建一个字符串。就像是在25平方米的阵列中,那么我必须创建平方米[;;;]24@Vikram但是默认值的东西不在你的问题中!你可能想把它添加到你的问题中,而不是在别人的回答下!我更新了我的问题,请看一看,我所要做的就是用数组中提供的度量值创建一个字符串。就像是在25平方米的阵列中,那么我必须创建平方米[;;;]24@Vikram但是默认值的东西不在你的问题中!你可能想把它添加到你的问题中,而不是在别人的回答下!