我有一个PHP脚本循环遍历CSV文件的每一行,并将每一行组织成一个数组:
$counter = 0;
$file = file($ReturnFile);
foreach($file as $k){
if(preg_match('/"/', $k)==1){
$csv[] = explode(',', $k);
$counter++;
}
}
...
while($x<$counter){
$line=$csv[$x];
这有效;我的问题是如何在每一行中找到一个子串。这样:
foreach($line as $value){
if($value==$name_search){
// action
如果$line
的值完全等于$name_search
的值,则有效($name_search
是一个人的姓)。但是,如果$line
的值中有空格或其他字符(例如:$line
等于“Wilson(ID:345)”或“Wilson”不会,则此功能不起作用匹配{Wilson}的$name_search
值。
到目前为止,我已经尝试过:
if(strpos($value, $res_name_search) !== false){
if(substr($value, 0, strrpos($value, ' '))==$res_name_search){
if(substr(strval($value), 0, strrpos(strval($value), ' '))==$res_name_search){
没有成功......我是否有语法错误和/或是否有更好的方法来实现这一目标?
答案 0 :(得分:1)
我认为你已经颠倒了参数。以下应该有效:
if (strpos($res_name_search, $value) !== false)
次要注意事项:使用stripos
进行不区分大小写的搜索。
答案 1 :(得分:0)
尝试使用strpos,如下所示:if (strpos($res_name_search, $value))
答案 2 :(得分:0)
你也可以试试这个:
if (preg_match('/'.strtolower($res_name_search).'/', strtolower($value)))
答案 3 :(得分:0)
您可以在逻辑中应用上述要点(点数顺序可能不同)
答案 4 :(得分:0)
试试这个:
$str = 'This is my test: wilson ';
$search = "wilson";
if(strpos(strtolower($str), strtolower($search)) !== false){
echo 'found it';
}
答案 5 :(得分:0)
这是内置PHP函数stristr
存在的情况。此函数是strstr
函数的不区分大小写的等价物,根据文档:
返回haystack字符串的一部分,从第一次出现的针头开始,包括第一次出现针头到haystack的末尾。
使用此功能,实现这样的任务变得如此简单:
foreach($line as $value){
if( stristr($value, $name_search) !== FALSE){
// substring was found in search string, perform your action
中详细了解相关信息
我希望这会有所帮助。
答案 6 :(得分:0)