在下面的代码中,我创建了一个数组,其中包含与某些特定字符串模式匹配的值。在此数组中,我试图仅获取具有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);
}
}
答案 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;
}
}