我有这个文本文件:
foo: bar
el: macho
bing: bong
cake color: blue berry
mayo: ello
而我正在努力实现的是,如果我“寻找”foo,它会返回bar(如果我寻找bing,它应该返回bong)。尝试完成此操作的方法是首先搜索文件,返回带有结果的行,将其放在字符串中并删除“:”之前的所有内容并显示字符串。
// What to look for
$search = 'bing';
// Read from file
$lines = file('file.txt');
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if(strpos($line, $search) !== false)
echo $line;
$new_str = substr($line, ($pos = strpos($line, ',')) !== false ? $pos + 1 : 0);
}
echo "<br>";
echo "bing should return bong:";
echo $new_str;
但它不起作用。这里只是我尝试过的众多事情之一。
来源:
许多stackoverflow链接和可比搜索:
https://www.google.com/search?client=opera&q=php+remove+everything+after
https://www.google.com/search?client=opera&q=php+search+text+file+return+line
之前我曾问过一个问题,但对我来说答案是“专业”,我真的需要一个无保护的解决方案/答案。我一直试图弄明白,但我无法让它发挥作用。
编辑: 它解决了!非常感谢你的时间和帮助,我希望这可能对其他人有用!
答案 0 :(得分:2)
这应该适用于您正在寻找的东西,我在我的服务器上进行了测试,它似乎适合您正在寻找的东西。
$lines_array = file("file.txt");
$search_string = "bing";
foreach($lines_array as $line) {
if(strpos($line, $search_string) !== false) {
list(, $new_str) = explode(":", $line);
// If you don't want the space before the word bong, uncomment the following line.
//$new_str = trim($new_str);
}
}
echo $new_str;
?>
答案 1 :(得分:2)
我会这样做:
foreach($lines as $line)
{
// explode the line into an array
$values = explode(':',$line);
// trim the whitspace from the value
if(trim($values[1]) == $search)
{
echo "found value for ".$search.": ".$values[1];
// exit the foreach if we found the needle
break;
}
}
答案 2 :(得分:1)
$search = 'bing';
// Read from file
$lines = file('text.txt');
$linea='';
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if(strpos($line, $search) !== false) {
$liner=explode(': ',$line);
$linea.= $liner[1];
}
}
echo 'Search returned: '. $linea;
说明: - $ linea var在循环之前创建,它将包含搜索结果。如果在行上找到值 - 爆炸字符串和make数组,从数组中获取第二个var,将其放入搜索结果容器变量中。
答案 3 :(得分:1)
由于您的数据几乎为YAML [see lint],因此您可以使用parser来获取相关的PHP数组。
但是,如果可以使用你的解决方案:
// What to look for
$search = 'bing';
// Read from file
$lines = file('file.txt');
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if(strpos($line, $search) !== false){
echo array_pop(explode(":", $line));
}
}
答案 4 :(得分:0)
使用fgetcsv
:
$bits = array();
if (($handle = fopen('t.txt','r')) !== FALSE) {
while (($data = fgetcsv($handle, 0, ":")) !== FALSE) {
$bits[$data[0]] = $data[1];
}
}
# Now, you search
echo $bits['foo'];
$bits
将为每个分割部分提供一个键,这使您的终极目标非常简单。这是它的样子:
Array
(
[foo] => bar
[el] => macho
[bing] => bong
[cake color] => blue berry
[mayo] => ello
)