这是我的代码,用于检查我的.csv文件的一行是否包含特定名称,但它不起作用。
我认为这与if
声明有关。
$file_handle = fopen("sources.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
if ($line_of_text[0] = 'paul') {
echo 'Found';
}
}
fclose($file_handle);
我正在尝试检查sources.csv文件中的名称' Paul'
出于技术原因,我无法使用像MySQL这样的数据库。
答案 0 :(得分:1)
由于您尚未提供文件样本,因此我提交以下内容作为替代方案。
请注意,在您目前的代码中,您使用单个等号=
进行分配,而不是使用==
或===
进行比较,仅表示为FYI
if ($line_of_text[0] = 'paul')
应为if ($line_of_text[0] == 'paul')
假设以下.csv
格式(即使没有逗号也可以使用)并且区分大小写,请参阅脚注,了解不区分大小写的搜索。
Paul, Larry, Robert
代码:
<?php
$search = "Paul";
$lines = file('sources.csv');
$line_number = false;
while (list($key, $line) = each($lines) and !$line_number) {
$line_number = (strpos($line, $search) !== FALSE);
}
if($line_number){
echo "Results found for " .$search;
}
else{
echo "No results found for $search";
}
<强>脚注:强>
对于不区分大小写的搜索,请使用stripos()
$line_number = (stripos($line, $search) !== FALSE);
在...上找到行号
为您提供找到它的行号:
$line_number = (strpos($line, $search) !== FALSE) ? $count : $line_number;
或(不区分大小写)
$line_number = (stripos($line, $search) !== FALSE) ? $count : $line_number;
然后只是echo $line_number;
答案 1 :(得分:0)
尝试使用in_array而不是==
if(in_array('paul', $line_of_text)) {
// FOUND
}
答案 2 :(得分:0)
你的问题就在这一行:
if ($line_of_text[0] = 'paul') {
这将始终为真,因为您使用assign运算符paul
将值$line_of_text[0]
分配给=
。你想要做的是检查两者是否相等,所以你需要使用相等运算符==
。代码行应该是:
if ($line_of_text[0] == 'paul') {
PHP中还有===
等于运算符,它检查相同的值和相同的类型。 (与编译语言相比,这是PHP的一个特别令人讨厌的特性)
e.g。考虑:`$ foo = 5; $ bar =&#34; 5&#34 ;;
if ($foo === $bar) // this will be false because foo is an int, and bar is a string
if ($foo == $bar) // this will be true
不要与!=
比较运算符混淆:
if ($foo != $bar) // foo is not equal to bar (note the single =)