【问题标题】:Get value by sweeping PHP string扫PHP字符串获取价值
【发布时间】:2020-10-13 19:09:34
【问题描述】:

我在一个变量中有以下值:

$var = M000000017590;

获得自:

$DATO  = "P000001759000_M000000017590_MSG1TRANSACCIONEXITOSA _MSG2 CONMILLA,"; 
$porciones = explode("_", $DATO);
$var = $porciones[2];

我需要从左到右开始扫描,当我找到第一个非零数字时,该数字会从那里将值保存在变量中,例如: M000000017590 = 17590 str_replace 对我没有帮助,将 0 替换为 "" 因为在最后一个字符串中它也可以包含 0,有帮助吗?

【问题讨论】:

  • 请向我们展示您的尝试。附带说明:零也是整数:-)
  • $DATO = "\u0001!Z0CONMILLA_P000001759000_M000000017590_MSG1TRANSACCION EXITOSA MSG2 CONMILLA,"; $porciones = explode("", $DATO);回声 $porciones[2];再次编辑问题......对不起:)
  • edit您的问题包含所有相关信息/代码,而不是在 cmets 中。 cmets 中的代码很难阅读。
  • 准备好了!该问题已被编辑:)
  • 从这里开始:stackoverflow.com/a/4601066/296555 如果遇到困难,请回复。

标签: php string


【解决方案1】:

在 PHP 中字符串是字节数组,您可以利用它

<?php

$DATO  = "P000001759000_M000000017590_MSG1TRANSACCIONEXITOSA _MSG2 CONMILLA,"; 

$num_detected = false;

$buffer = '';

for($i=0; $i<strlen($DATO); $i++)
{        
    //start
    if( intval($DATO[$i]) > 0 )
        $num_detected = true;
    
    //middle
    if($num_detected)
        $buffer .=$DATO[$i];
    
    //stop
    if($num_detected && !intval($DATO[$i]))
        break;
}

echo $buffer;

?> 

您开始从字符串中一个接一个地读取字符,并检查它的数值是否适合您。因此,一旦您找到所需的值(在您的情况下为非零),您就会从那里开始累积,直到遇到不想要的值(在您的情况下为零/alpha)

更新:正如@waterloomatt 所述,如果在有效序列中嵌入了零,则上述算法将失败。要解决此问题,请尝试

<?php
 
 function checkAhead($DATO, $i){
      
    if(!isset($DATO[$i++]))
        return false;
      
      if(is_numeric($DATO[$i++]))
          return true;
      else
          return false;
}

$DATO  = "P0000017590040034340_M000000017590_MSG1TRANSACCIONEXITOSA _MSG2 CONMILLA,"; 

$num_detected = false;

$buffer = '';

for($i=0; $i<strlen($DATO); $i++)
{        
    //start
    if( intval($DATO[$i]) > 0 )
        $num_detected = true;
    
    //middle
    if($num_detected)
        $buffer .=$DATO[$i];
    
    //stop
    if($num_detected && ( !checkAhead($DATO, $i)  ))
        break;
}

echo $buffer;

?>

【讨论】:

  • $DATO = "P000101759000_... 怎么样?它将返回 10 而不是 101759000
  • 我想只有他想要
  • 抱歉,我刚刚编辑了我的评论。问题是任何包含0 的数字都会破坏这个算法。它还会丢失任何尾随零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2015-06-20
  • 2012-08-24
  • 1970-01-01
相关资源
最近更新 更多