2011-11-23 63 views
1
  1. 我有PHP搜索文本文件中的包,然后它打印回信息。我有一个工作脚本,但只有在用户正确键入包装名称并使用该物品在文件中的任何captailization时才有效。我如何让PHP对此不太严格?就像用户拼写错误,或者忘记“ - ”一样。
  2. 下面是我正在从文件中获取信息的另一个脚本。我的目标是脚本抓住第一行和第三行,而不是第二行。该PACKAGES.TXT的文件内容是这个样子:
PACKAGE NAME: asdf 
PACKAGE SIZE: 8k 
PACKAGE LOCATION: www.asdf.com/asdf-package.html 

目前,我用这个来收集信息,但它根本就没有与第一和第三工作行:3 PHP字符串问题

$data4 = file('www.asdf.com/PACKAGES.TXT'); //the text file above 

for ($i = 0, $found = FALSE; isset($data4[$i]); $i++) { //$i is the counter. 
/*$package2 consists of the word searched and a constant string: "PACKAGE NAME: */ 
if (trim($data4[$i]) === $package2) { 
$fdas = trim($data3[++$i]); //$fdas is going to hold the url info 
    echo ($find2); //$find2 is the original package name. 
    echo("<br/>"); //two breaks 
    echo("<br/>"); 
//the lines below handle making a link from a URL and custom package location 
$finout = strstr($fdas, '.'); // 
$secondfinout = "http://www.asdf.com/".$finout; 
echo("<a href='$secondfinout'>$secondfinout</a>"); 
$found = TRUE; 
break; 
} 
} 

第二步是我正在写的脚本。它不起作用。我确实有简单的,遵循相同的概念,唯一的问题是strstr($ fdas,'。');在网址中加入一个点。我必须在某处启动字符串,并且忽略不属于url的部分,并且点似乎是我唯一的选择,有没有办法可以删除它?

非常感谢您的任何意见,我明白这是一个漫长的问题,所以请随时回答您的意见。我应该注意到,php脚本是由javascript/html表单启动的,然后将POST传递给PHP。我相信这些都是正确的。

谢谢。

+0

请每个问题只有一个问题 – knittl

+0

尽管他们是相关的问题可能会更好。我很高兴得到所有的代码,而不是他们提供的很少的问题。 :) – bozdoz

+0

对不起,knitti。但是,我确实认为这是有道理的,因为它们都与字符串和字符串的处理有关。祝你有美好的一天 – user1062058

回答

3

您可以在比较强制区分:

if (strtolower(trim($data4[$i])) === strtolower($package2)) { 

或者做一些实际的执法,像通过woodchipper运行的人,如果他们进入坏套管的数据。这些日子里工作人员非常丰富,而且一般都是一次性的,所以看到其他数据输入人员变成番茄酱应该能够提升工作场所满意度。

+0

哈哈,这很有趣。感谢代码,它工作。如果你不回答这个问题,我该如何处理camelCase的东西? – user1062058

+0

好吧,在比较时间做strtolower处理camelcase通过使它全部小写无论如何。但是,当文件生成之前,您可以执行一些预处理,以确保在文件放入磁盘之前将前缀部分(PaCKagE naMe)合理化。 –

+0

我明白了。 当我带入文件$ data4 = file('www.asdf.com/PACKAGES.TXT'); ---我可以将所有内容转换为小写吗? – user1062058

1

1)你可以使用正则表达式和preg_replaceRegular Expression References

2)我想如果你想有一个txt文件的第一行和第三行,你可以使用下面的代码:

$data4 = file('www.asdf.com/PACKAGES.TXT'); 
$firstLine = $data4[0]; //PACKAGE NAME: asdf 
$thirdLine = $data4[2]; //PACKAGE LOCATION: www.asdf.com/asdf-package.html 

3)如果你想从第三行获取URL,你可以找到preg_match的正斜杠:

preg_match('/\/(\S+)/',$thirdLine,$finout); 
$secondfinout = "http://www.asdf.com/".$finout[1]; //take the second value in the newly created $finout array, which is asdf-package.html 

希望能够回答所有问题。 :)

+0

嗨,谢谢你的回应!所以$ data4 = file('www.asdf.com/PACKAGES.TXT');实际上将其转换为PHP中的数组? – user1062058

+0

是:将整个文件读入一个数组,每一行都是一个新的密钥。见http://www.php.net/manual/en/function.file.php – bozdoz