如何在不使用strpos的情况下在另一个字符串中找到字符串?

时间:2016-07-12 22:21:18

标签: php string

我一直在尝试搜索在另一个字符串中查找字符串的方法并返回使用PHP找到它的位置,但不使用strpos,因为这将帮助我学习编程而不依赖关于本机功能这么多。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我不认为依赖本机功能有什么不妥,但如果你只想弄清strpos 之类的东西会如何工作呢?场景,这是一个只使用语言结构的非常基本的例子:

function my_strpos ($haystack, $needle, $offset = 0) {

    // for loop with indexes for both strings, up to the length of $haystack
    for ($h_index=$offset, $n_index=0; isset($haystack[$h_index]); $h_index++, $n_index++) {

        if ($haystack[$h_index] == $needle[$n_index]) {           // *CHARACTERS MATCH*

            if (!isset($start_pos)) $start_pos = $h_index;        // set start_pos if not set

            if (!isset($needle[$n_index + 1])) return $start_pos; // all characters match


        } else {                                                  // *CHARACTERS DON'T MATCH*

            $n_index = -1;                                        // reset $needle index

            unset($start_pos);                                    // unset match start pos.
        }
    }
    // all charactes of $haystack iterated without matching $needle
    return false;
}

这显然是一个天真的实现,它不会检查有效输入或处理错误,但希望它会演示一种在另一个字符串中找到一个字符串的可能方法。

如果你真的想知道strpos 在幕后如何工作,here is a great (although a bit dated) article关于如何理解PHP源代码,恰好使用strpos举个例子。

答案 1 :(得分:0)

您可以使用strstr,文档here

<?php 
   $haystack = "Hello my dear friend";
   $needle = "friend";
// Returns false if needle is not inside haystack
   strstr($haystack, $needle);
?>