多次点击的PHP搜索

多次点击的PHP搜索,php,Php,这是file1.php: <?php // Start the session session_start(); ?> <?php $path_to_check = ''; $needle = $_POST['query']; foreach(glob($path_to_check . '*.xml') as $filename) { foreach(file($filename)as $fl) { if(strpos($fl, $needle)!==

这是file1.php

<?php
// Start the session
session_start();
?>
<?php
$path_to_check = '';
$needle = $_POST['query'];

foreach(glob($path_to_check . '*.xml') as $filename)
{
    foreach(file($filename)as $fl)
    {
    if(strpos($fl, $needle)!==false)
    {
      $_SESSION["hit"] = $filename;
    }
    }
}
header('Location: file2.php');
?>

搜索正在工作,并返回searchword所在文件的名称,该文件作为变量$\u SESSION[“hit”]=$filename

但是,如果在多个文件中找到searchword,它将不起作用。然后,我需要转到另一个页面file1b.php(或file1b.html),其中将列出多个文件。然后从那里选择进入file2.php


如何做到这一点?

使
$\u会话['hit']
成为所有文件名的一个匹配数组

$_SESSION['hit'] = array();
foreach(glob($path_to_check . '*.xml') as $filename)
{
    foreach(file($filename)as $fl)
    {
        if(strpos($fl, $needle)!==false)
        {
            $_SESSION["hit"][] = $filename;
            break;
        }
    }
}
然后,您可以使用一个简单的循环打印文件名

foreach ($_SESSION['hit'] as $filename) {
    echo $filename . "<br>";
}
foreach($\u会话['hit']作为$filename){
echo$filename。“
”; }
您可以在会话中存储阵列。只需在$\u会话[“hit”]上创建一个空数组,并将每个命中推送到该数组:)使用一个数组并在下一个文件中循环遍历它:
$\u会话[“hit”][]=$filename我想补充一点,在文件的所有行中循环都会有过大的杀伤力。只需在
file\u get\u contents
上设置
strpos
,可能就可以了。说得好。我使用了
break
,因此一旦找到匹配行,它将停止搜索。最佳方法是使用
while($f1=fgets($fp))
这样您就不必首先将整个文件读入内存最后,它只返回一个文件名,而不是所有文件名,即使搜索词出现在多个文件中。我还尝试了“echo$array();”但是它什么也没给。你不能回显数组,使用
var\u dump($\u SESSION['hit'])
echo$\u SESSION['hit]]
甚至不是有效的语法,您应该从中得到一个错误<代码>[]
只有在分配中才允许在其内部没有索引。