2

ユーザーから入力を取得し、ファイルを検索して結果を表示したい場合:

$searchValue = $_POST['search'];

$handle = @fopen("home.txt","r");
# read line by line
while (($buffer = fgets($handle, 4096)) !== false && // the condtion for the $searchValue) {
    echo '<tr>';
        $array = explode(',', $buffer);
    foreach($array as $val){
         echo '<td>'.$val.'</td>';      
        } 
    echo '</tr>';       
}

何をしなければならないかわかりません。関連する $searchvalues を含むテキスト ファイルの行を表示したいだけです。

4

2 に答える 2

1

file コマンドを使用することもお勧めします。

array file  ( string $filename  [, int $flags = 0  [, resource $context  ]] )

各行を配列の要素としてファイルを読み込みます。そこから、各行を繰り返します(一致したファイル内の行を返すと述べたので、 file(...) をお勧めします):

if (($fileLines = file('home.txt')) !== false)
{
  foreach ($fileLines as $line)
  {
    if (strpos($line, $searchVal) !== false)
    { // match found
      echo '<tr><td>'.str_replace(',','</td><td>',trim($line)).'</td></tr>';
    }
  }
}

配列を再結合するためだけに配列を分解しても意味がありません。爆発させてから、</td><td> を使用して implode() することもできます。

また、ファイルには CSV の行があるようです。その場合は、各行を反復処理してから、アイテムを爆発(...)し、展開された変数に対して in_array(...) (または部分一致の strpos を再度使用して反復処理) を実行することができます。例えば:

$values = explode(',',$line);
// array search (while entries)
if (in_array($searchVal,$values)) { ... }
// array search with partial matches
foreach ($values as $val) {
  if (strpos($val,$searchVal) !== false) { ... }
}
于 2010-11-04T13:53:47.427 に答える
0

あなたが探しているのはstrpos()

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

干し草の山の文字列で最初に出現した針の数値位置を返します。

位置を整数として返します。針が見つからない場合、strpos()はブール値のFALSEを返します。

于 2010-11-04T13:21:59.207 に答える