4
votes

Rechercher un nom dans un fichier txt en utilisant PHP

J'essaie de créer une fonction de recherche pour rechercher un nom dans une donnée contenue dans un fichier txt.

J'ai une donnée comme celle-ci:

<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>

J'ai eu l'idée de changer ces données en un tableau comme celui-ci:

$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];
    }
}

Ensuite, divisez plus pour devenir multidimensionnel

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
)

Pour que je puisse rechercher le nom par clé. Maintenant, je ne sais plus quoi faire. J'essaie d'utiliser la fonction foreach () pour exploser la valeur dans un tableau, mais cela n'a pas fonctionné, cela a créé un autre problème, le tableau n'affiche que quelques caractères.

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

HTML

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

À propos de ma recherche, je pense utiliser post et si tapez correctement avec les données en entrée de recherche, les données s'afficheront.


6 commentaires

Cela pourrait aider - stackoverflow.com/a/12315645/5284695


Pourquoi essayez-vous de diviser cela à \ n deux fois? (Eh bien, vous essayez seulement, car '\ n' comme vous l'avez utilisé dans la première explosion, n'est pas un caractère de nouvelle ligne.) Votre toute la logique pour lire ceci dans un tableau est bien trop complexe - utilisez plutôt file (assurez-vous de faire attention à ce que le manuel a à dire sur la gestion des sauts de ligne), et prenez-le à partir de là.


@AakashMartand Je pense que cette solution ne fonctionne que si vous avez un tableau avec une clé et une valeur. J'ai un tableau qui contient une valeur contenant de nombreuses informations que je dois diviser et que la recherche peut faire, n'est-ce pas? Je ne peux penser à aucune solution


Double possible de Comment mettre une chaîne dans un tableau, divisé par nouvelle ligne?


Vos données semblent être au format csv. Mettez vos données dans une variable (disons $ datas), et: array_map ('str_getcsv', exploser ('\ n', $ datas))


@ ThomasMauduit-Blin non, c'est juste un fichier txt


3 Réponses :


1
votes

Et un exemple PHP, plusieurs lignes correspondantes seront affichées:

<?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 commentaires

0
votes

Vous pouvez essayer de suivre

/* 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;


0 commentaires

0
votes

Votre fichier semble être au format CSV (ou du moins son contenu est), alors considérez ce morceau de code:

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

Il convertira votre fichier en un tableau. p>

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


0 commentaires