查找包含给定单词和返回子字符串的行

时间:2011-04-11 06:22:04

标签: php

我的文件行显示为 word_1:word_2 (例如文件看起来像

username:test
password:test_pass
dir:root

。当我有word_1时,如何从文件word_2中找到? PHP中是否包含和子串一样的字符串?

2 个答案:

答案 0 :(得分:3)

要查明字符串是否包含其他字符串,请使用strpos()

请注意,在使用!==函数时需要strpos(),因为如果字符串以您要查找的字符串开头,则返回0,这与false相同。

if(strpos($mystring, 'word_1') !== false)
{
    //$mystring contains word_1
}

我会使用explode()函数来分割字符串并获取第二部分。

答案 1 :(得分:1)

你没有很好地描述你的文件格式,但它的格式可能像csv文件

$file = fopen('filename', 'r');
while (($line = fgetcsv($file, 1024, ':')) !== false) {
  if (in_array($needle, $line)) {
    return $line;
  }
}
return null;

如果您认为自己始终在寻找第一个字段,则可以将in_array(/* .. */)替换为$line[0] === $needle

更新:在编辑问题之后,我会建议像这样的东西,因为看起来该文件只是一种csv文件(用“:”代替“,”)。

function getValue ($key, $filename) {
  $file = fopen('filename', 'r');
  while (($line = fgetcsv($file, 1024, ':')) !== false) {
    if ($line[0] === $key) {
      fclose($file);
      return $line[1];
    }
  }
  fclose($file);
  return null;
}

还要考虑一次读取文件,然后只访问值

class MyClass {
  private $data = array();
  public function __construct ($filename) {
    $file = fopen('filename', 'r');
    while (($line = fgetcsv($file, 1024, ':')) !== false) {
      $this->data[$line[0]] = $line[1];
    }
    fclose($file);
  }
  function getValue ($key, $filename) {
    return array_key_exists($key, $this->data)
           ? $this->data[$key];
           : null;
  }
}