如何在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+
    ->任何重复的数字

@lonut没关系,但我必须检测测量的类型,并使用它形成一个字符串,如
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但是默认值的东西不在你的问题中!你可能想把它添加到你的问题中,而不是在别人的回答下!