Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串结尾可以包含随机数时的PHP字符串比较_Php - Fatal编程技术网

字符串结尾可以包含随机数时的PHP字符串比较

字符串结尾可以包含随机数时的PHP字符串比较,php,Php,我需要使下面的PHP工作。我基本上需要获取存储在$sshcommanderesponseString中的字符串,并检查它是否包含4个可能的字符串中的1个 start: Job is already running: mysql mysql start/running, process 8019 mysql stop/waiting mysql start/running, process 8348 stop: Unknown instance: mysql start/running, proc

我需要使下面的PHP工作。我基本上需要获取存储在
$sshcommanderesponseString
中的字符串,并检查它是否包含4个可能的字符串中的1个

start: Job is already running: mysql
mysql start/running, process 8019
mysql stop/waiting mysql start/running, process 8348
stop: Unknown instance: mysql start/running, process 8693
最后3个字符串以4位数字结尾,该数字始终是不同的值。因此,我无法像下面的函数那样进行简单的if/else检查,因为字符串有时会以4位数字结尾

那么,检查我的字符串是否与这4个字符串中的1个匹配的最佳方法是什么

function didMySqlDbRestart($sshCommandResponseString){

    if( $sshCommandResponseString == 'start: Job is already running: mysql' ){
        return true;
    }else if( $sshCommandResponseString == 'mysql start/running, process 8019' ){
        return true;
    }else if( $sshCommandResponseString == 'mysql stop/waiting mysql start/running, process 8348' ){
        return true;
    }else if( $sshCommandResponseString == 'stop: Unknown instance: mysql start/running, process 8693' ){
        return true;
    }else{
        return false;
    }
}

if(didMySqlDbRestart($sshCommandResponseString)){
    echo 'SUCCESS: MySQL Database Rebooted';
}else{
    echo 'ERROR: MySQL Database Did Not Reboot';
}

更新

再加上用户Laser的答案,也许类似的东西就可以了

  function didMySqlDbRestart($sshCommandResponseString){
    if(preg_match('/^.*\d{4}$/', trim($sshCommandResponseString)) > 0){
        return true;
    }else if($sshCommandResponseString == 'start: Job is already running: mysql'){
        return true;
    }else{
        return false;
    }
  }

使用
strpos
检查字符串的常量部分,或者使用
preg_match
使用正则表达式测试它

<?php
  function didMySqlDbRestart($sshCommandResponseString){
    return preg_match('/process \d+$/', trim($sshCommandResponseString)) > 0;
  }

 if(didMySqlDbRestart($sshCommandResponseString)){
    echo 'SUCCESS: MySQL Database Rebooted';
    } else{
   echo 'ERROR: MySQL Database Did Not Reboot';
 }

将这4个字符串分配给一个数组(这样它的动态特性就不会受到影响),并在正则表达式中进行foreach比较。*
是不必要的,您也不需要处理第一种情况,通常只需要在数组末尾测试数字string@Laser请参见底部我更新的问题,我使用了您的代码,但为了解决pwolaq提到的问题进行了修改。如果你想在你的回答中做类似的事情,还有一件事值得一提。以随机数结尾的3个字符串在像这样的数字之前总是以
process
作为前缀,因此正则表达式也可以在数字之前查找该单词?@JasonDavis使用正则表达式,而您只想知道字符串是否包含子字符串“process”是毫无意义的。只需使用strpos即可。它更快、可读性更强。@JasonDavis是的,这样您就可以可靠地为“进程”设置RPOS,并知道mysql已经重新启动,这比您对不感兴趣的数字重新登录要快。同样,您可以只为不包含PID的固定第一个字符串设置strpos。因为您显然只想知道MySql是否重新启动了。