2016-04-14 4 views
-2

Это file1.php:поиск 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'); 
?> 

Поиск работает и возвращения имени файла, в котором найдена Поиск слова в переменной $ _SESSION [ «хит»] = $ имя файла;

Однако, если поисковое слово найдено в нескольких файлах, оно не будет работать. Тогда мне нужно будет перейти на другую страницу file1b.php (или file1b.html), где будут перечислены несколько файлов. Затем оттуда сделайте выбор, чтобы добраться до file2.php.

Как это можно сделать?

+0

вы можете хранить массив в сеансе. просто создайте пустой массив на $ _SESSION ["hit"] и нажмите каждый удар на этот массив :) – Luke

+0

Используйте массив и зацикливайте его в следующем файле: '$ _SESSION [" hit "] [] = $ filename;' – AbraCadaver

ответ

0

Сделайте $_SESSION['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>"; 
} 
+0

Я бы добавил, что его overkill перебирает все строки файла. Возможно, просто 'strpos' на' file_get_contents'. – AbraCadaver

+0

Хорошая точка. Я использовал 'break', чтобы остановить поиск, как только найдет соответствующую строку. Оптимальным методом было бы использовать 'while ($ f1 = fgets ($ fp))', поэтому вам не нужно вначале считывать весь файл в память. – Barmar

+0

Когда я добавляю 'echo $ _SESSION ["hit"] [];' в конце он просто возвращает одно имя файла - не все имена файлов - в то время как поисковое слово встречается в нескольких файлах. Я также попробовал 'echo $ array();' но ничего не давало. –

Смежные вопросы