通过扫描PHP字符串获取值

通过扫描PHP字符串获取值,php,string,Php,String,变量中有以下值: $var = M000000017590; 获得自: $DATO = "P000001759000_M000000017590_MSG1TRANSACCIONEXITOSA _MSG2 CONMILLA,"; $porciones = explode("_", $DATO); $var = $porciones[2]; 我需要开始从左向右扫掠,当我找到第一个非零值时,它将值保存在变量中,例如: M000000017590=1759

变量中有以下值:

$var = M000000017590;
获得自:

$DATO  = "P000001759000_M000000017590_MSG1TRANSACCIONEXITOSA _MSG2 CONMILLA,"; 
$porciones = explode("_", $DATO);
$var = $porciones[2];
我需要开始从左向右扫掠,当我找到第一个非零值时,它将值保存在变量中,例如: M000000017590=17590
str\u replace
不能帮助我将0替换为
,因为在最后一个字符串中它也可以包含0,一些帮助?

在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;

?> 

您开始逐个读取字符串中的字符,并检查其数值是否适用于您。因此,一旦你找到一个期望值(在你的情况下是非零的),你就开始从它开始累积,直到你遇到一个不期望的值(在你的情况下是零/α)

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

<?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=“\u0001!Z0CONMILLA_p00001759000_M000000017590_msg1交易出口MSG2 CONMILLA,”$豪猪=爆炸(“,$DATO);echo$porciones[2];再次编辑问题。。。抱歉:)请将您的问题包含在所有相关信息/代码中,而不是在评论中。注释中的代码很难阅读。准备好了!问题已编辑:)从这里开始:如果遇到问题,请发回。关于
$DATO=“P000101759000…”
?它将返回
10
而不是
101759000
。我想只有他想要抱歉,我刚刚编辑了我的评论。问题是,任何包含
0
的数字都会破坏此算法。它还将丢失任何尾随的零。