尝试使用php中的字符串匹配获取数组值时,将创建两个数组

时间:2018-08-31 12:49:11

标签: php arrays

在下面的代码中,我创建了一个数组,其中包含与某些特定字符串模式匹配的值。在此数组中,我试图仅获取具有POST关键字的数组的那些值,并将其保存在另一个数组中。它应该返回1个大小为2的数组。但是,当我尝试这样做时,会导致创建两个数组。一个大小为1的数组,另一个大小为2的数组。但是我只想一个数组。有人可以指导我哪里做错了。


$fh = fopen("website-audit.2018.08.30.log","r");
$started = false;
while (!feof($fh)) {
  $line = fgets($fh);
  if($started) {
    $temp .= $line;
    if(strpos($line, "--") === 0 && strpos($line, "-Z-") > 0) {
      $started = false;
      $array[] = $temp;
    }
  }
  if(strpos($line, "--") === 0 && strpos($line, "-A-") > 0) {
    $started = true;
    $temp = $line;
  }
}
fclose($fh);


$keyword = 'POST';
foreach($array as $index){
    if (strpos($index, $keyword) !== FALSE){
        $val = array($index);
        var_dump($val);
    }   
}

1 个答案:

答案 0 :(得分:1)

您每次在循环中都要创建一个新数组,而不是添加到数组中。

$val = array();
foreach ($array as $index) {
    if (strpos($index, $keyword) !== false) {
        $val[] = $index;
    }
}
var_dump($val);

您也可以使用array_filter()

$val = array_filter($array, function($index) use ($keyword) {
    return strpos($index, $keyword) !== false;
});

或者您可以在从文件读取的循环中执行此操作,而不是在单独的循环中执行

while ($line = fgets($fh)) {
 if($started) {
    $temp .= $line;
    if(strpos($line, "--") === 0 && strpos($line, "-Z-") > 0) {
      $started = false;
      $array[] = $temp;
      if (strpos($temp, $keyword) !== false) {
        $val[] = $temp;
      }
    }
  }
  if(strpos($line, "--") === 0 && strpos($line, "-A-") > 0) {
    $started = true;
    $temp = $line;
  }
}