在PHP数组中查找子字符串?

时间:2016-04-11 14:41:29

标签: php arrays

我有一个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){

没有成功......我是否有语法错误和/或是否有更好的方法来实现这一目标?

7 个答案:

答案 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)

  1. 使用php TRIM功能
  2. 在计算之前转换为小写或大写
  3. 使用var_dump检查数据类型
  4. 而不是使用var_dump类型将cast $ value和$ name_search用于STRING
  5. 还检查===
  6. 删除空格(如果需要)
  7. 使用正则表达式删除(,),:, - ,;等...
  8. 当然应用功能strpos
  9. 您可以在逻辑中应用上述要点(点数顺序可能不同)

答案 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

您可以在official documentation

中详细了解相关信息

我希望这会有所帮助。

答案 6 :(得分:0)

我建议您使用fgetcsv函数,这将为您返回每个迭代的列数组,如下所示:

 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
 // ...
 }

如果在您的CSV文件中, NAME 列位于第2位,您想知道是否存在令牌,只需使用

if (strpos('Wilson', $data[2] !== FALSE) {
    // do your job
}

如果您想处理不区分大小写,请使用stripos函数