比较第一个数组值和字符串if

时间:2016-11-23 21:32:47

标签: php arrays

以下代码中的if语句不起作用,我不知道原因。当我使用var_dumpprint_r时,它会正确显示值,但语句不会评估True

<?php
$array_log = explode("\n", file_get_contents('log.txt'));
$ante_ultimo_elemento =  count($array_log)-2;
$valor_ante_ultimo = $array_log[$ante_ultimo_elemento];


$valor_limpio  = utf8_decode($valor_ante_ultimo);
$porciones1 = explode("=", $valor_limpio);

$valor_limpio2  = $porciones1[1];
$porciones2 = explode('?', $valor_limpio2);
$estado = $porciones2[0];

if($porciones2[0] === "Backup completato con successo"){
    $estado_final = "COMPLETO";
}

if($porciones2[0] == "Nessun backup effettuato"){
    $estado_final = 'CERO';
}

if($porciones2[0] == "Errore nella procedura di backup"){
    $estado_final = 'ERROR';
}
?>

log.txt的:

[Log Info]
BkpSet00.bks\Html-Log00.zip=Backup completato con successo÷00 : 00 : 59÷231466496
BkpSet00.bks\Html-Log01.zip=Errore nella procedura di backup÷00 : 00 : 02÷0
BkpSet00.bks\Html-Log02.zip=Backup completato con successo÷00 : 00 : 43÷216655360
BkpSet01.bks\Html-Log00.zip=Nessun backup effettuato÷00 : 00 : 02÷0
BkpSet01.bks\Html-Log01.zip=Errore nella procedura di backup÷00 : 00 : 46÷0
BkpSet02.bks\Html-Log00.zip=Nessun backup effettuato÷00 : 00 : 02÷0
BkpSet02.bks\Html-Log01.zip=Backup completato con successo÷00 : 00 : 14÷216655360
BkpSet03.bks\Html-Log00.zip=Nessun backup effettuato÷00 : 00 : 02÷0
BkpSet03.bks\Html-Log01.zip=Backup completato con successo÷00 : 00 : 17÷231663104
BkpSet04.bks\Html-Log00.zip=Backup completato con successo÷00 : 00 : 16÷231663104
BkpSet00.bks\Html-Log03.zip=Backup completato con successo÷00 : 00 : 13÷216655360
BkpSet00.bks\Html-Log04.zip=Backup completato con successo÷00 : 00 : 09÷216655360
BkpSet16.bks\Html-Log00.zip=Backup completato con successo÷00 : 01 : 33÷1462158767
BkpSet05.bks\Html-Log00.zip=Errore nella procedura di backup÷11 : 18 : 30÷235564152142

谢谢!

2 个答案:

答案 0 :(得分:1)

使用strpos,因为测试包括您寻找的字符串以外的数据:

  $array_log = explode("\n", file_get_contents('log.txt'));
  $ante_ultimo_elemento =  count($array_log)-2;
  $valor_ante_ultimo = $array_log[$ante_ultimo_elemento];


  $valor_limpio  = utf8_decode($valor_ante_ultimo);
  $porciones1 = explode("=", $valor_limpio);
  /*
      [0] => BkpSet05.bks\Html-Log00.zip
      [1] => Errore nella procedura di backup�11 : 18 : 30�23556415214
  */

  $valor_limpio2  = $porciones1[1];
  $porciones2 = explode('?', $valor_limpio2);
  /*
      [0] => Errore nella procedura di backup�11 : 18 : 30�23556415214
  */
  $estado = $porciones2[0];

  if (strpos($porciones2[0], "Backup completato con successo") !== false){
      $estado_final = "COMPLETO";
  }

  if (strpos($porciones2[0], "Nessun backup effettuato") !== false){
      $estado_final = 'CERO';
  }

  if (strpos($porciones2[0], "Errore nella procedura di backup") !== false){
      $estado_final = 'ERROR';
  }

  echo 'estado_final '.$estado_final.'<br>';

答案 1 :(得分:0)

This一段代码就可以了。请注意,由于3v4l站点无法从文件中读取,因此我必须进行替换。只是省略那部分

// read from file. this function puts file content in an array line by line
$array_log = file('log.txt');
// finding the desired element. count()-2 means the one before the final entry. count()-1 means the final entry.
$ante_ultimo_elemento =  count($array_log)-2;
// taking the entry apart into its pieces using regex.
preg_match('/(?P<file>.*?)=(?P<message>[\w\s]*?)÷(?P<time>\d{2}\s?:\s?\d{2}\s?:\s?\d{2}\s?)÷(?<last_part>\d*)/', $array_log[$ante_ultimo_elemento], $estado);
// to avoid notice on the occasion that no statement could be matched, I highly recommend using if-elseif-else statement to avoid unwanted situations;
// or better still, use switch-case-default
switch($estado['message'])
{
    case "Backup completato con successo": {
        $estado_final = "COMPLETO";
        break;
    }
    case "Nessun backup effettuato": {
        $estado_final = 'CERO';
        break;
    }
    case "Errore nella procedura di backup": {
        $estado_final = 'ERROR';
        break;
    }
    default: {
        $estado_final = 'FATAL ERROR';
        break;
    }
}
echo $estado_final;