Поиск имени в файле txt с использованием PHP - PullRequest
4 голосов
/ 05 апреля 2019

Я пытаюсь создать функцию поиска для поиска имени в данных, содержащихся в текстовом файле.

У меня есть такие данные:

dimitri, 1998, php
nikolai, 1998, php
yuri, 1998, php
alyosha, 1998, php

Мне пришла в голову мысль, что эти данные можно преобразовать в такой массив:

Array
(
    [0] => dimitri, 1998, php
    [1] => nikolai, 1998, php
    [2] => yuri, 1998, php
    [3] => alyosha, 1998, php
)

Затем разделитьбольше, чтобы стать многомерным

Array
(
    [0] => dimitri
       Array(
           [0] => 1998
           [1]=> php
    [1] => nikolai
Array(
           [0] => 1998
           [1]=> php
    [2] => yuri
Array(
           [0] => 1998
           [1]=> php
    [3] => alyosha
Array(
           [0] => 1998
           [1]=> php
)

Так что я могу искать имя по ключу.Теперь я не знаю, что делать дальше.Я пытаюсь использовать функцию foreach(), чтобы взорвать значение в массиве, однако это не сработало, это создало другую проблему, массив отображал только некоторые символы.

Попытка

$array = array();
$split = explode('\n', file_get_contents($file));
foreach ($split as $content){
    $array = array_filter(array_map("trim", explode("\n", $content)));
    $array1 = array();
    $split2 = explode(", ", $array);
    foreach($array as $row){
        $array1[$row[1]][$row[2]][]=$row[0];
    }
}

HTML

<form action="search.php" method="POST">
    <input name="search_function" type="text" placeholder="Search who you want">
    <input type="submit" name="search" value="Search">
</form>

О моем поиске я думаю использовать сообщение, и, если ввести правильный текст с данными в поисковом вводе, данные отобразятся.

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

И пример PHP, будет отображаться несколько совпадающих строк:

<?php
$file = 'somefile.txt';
$searchfor = 'name';

// the following line prevents the browser from parsing this as HTML.
header('Content-Type: text/plain');

// get the file contents, assuming the file to be readable (and exist)
$contents = file_get_contents($file);
// escape special characters in the query
$pattern = preg_quote($searchfor, '/');
// finalise the regular expression, matching the whole line
$pattern = "/^.*$pattern.*\$/m";
// search, and store all matching occurences in $matches
if(preg_match_all($pattern, $contents, $matches)){
   echo "Found matches:\n";
   echo implode("\n", $matches[0]);
}
else{
   echo "No matches found";
}
0 голосов
/ 05 апреля 2019

Ваш файл, кажется, в формате CSV (или, по крайней мере, его содержимое), поэтому рассмотрим этот фрагмент кода:

$datas = array_map('str_getcsv', file($pathToYourFile));

Он преобразует ваш файл в массив.

https://www.php.net/manual/fr/function.file.php https://www.php.net/manual/fr/function.str-getcsv.php

0 голосов
/ 05 апреля 2019

Вы можете попробовать следовать

/* read data from text file, line by line */
$arr = []; // file contents go into this array
$handle = fopen('test.txt', 'r');
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $arr[] = explode(',', $line);
    }
    fclose($handle);
} else {
    echo 'error occured';
}

/* echo the form */
$form = <<<HEREDOC
<form action="#" method="POST">
    <input name="search_function" type="text" placeholder="Search who you want">
    <input type="submit" name="search" value="Search">
</form>
HEREDOC;
echo $form;

/* the search logic */
$found = false;
$count = 0; // count # of hits
if(isset($_POST['search'])) {
    foreach($arr as $key => $value) {
        foreach ($value as $key => $value) {
            if ($value == $_POST['search_function']) {
                $count++;
                $found = true;
                break 2;
            }
        }
    }
}
/* result */
$message = ($found === true) ? "found " . $_POST['search_function'] . " (" . $count . ") occurrence." : 'nothing found.';
echo $message;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...