Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有php内置函数的情况下获取字符串1中出现的字符串2的计数_Php_String_Count - Fatal编程技术网

如何在没有php内置函数的情况下获取字符串1中出现的字符串2的计数

如何在没有php内置函数的情况下获取字符串1中出现的字符串2的计数,php,string,count,Php,String,Count,如何在没有php内置函数的情况下获取字符串1中出现的字符串2的计数 例如: $strone = "Arun sukumar"; $strtwo = "a"; //Expected Output: 2 $strone = "Arun sukumar"; $strtwo = "uk"; //Expected Output: 1 我需要在不使用任何php内置函数的情况下获取计数 这是采访中提出的问题,有什么逻辑吗?不确定为什么不想使用内置的PHP函数,因为它们会更快,但类似这样的功能会起作用

如何在没有php内置函数的情况下获取字符串1中出现的字符串2的计数

例如:

$strone = "Arun sukumar";
$strtwo = "a";

//Expected Output: 2


$strone = "Arun sukumar";
$strtwo = "uk";

//Expected Output: 1
我需要在不使用任何php内置函数的情况下获取计数


这是采访中提出的问题,有什么逻辑吗?

不确定为什么不想使用内置的PHP函数,因为它们会更快,但类似这样的功能会起作用:

<?php
$haystack = 'Arun sukumar';
$needle = 'a';

// you seem to want a case insensitive search, so do a strtolower first
$haystack = strtolower($haystack);
$hitCount = 0;
for ($i = 0; $i < strlen($haystack); ++$i) {
    if ($needle === substr($haystack, $i, strlen($needle))) {
        $hitCount++;
    }
}
echo 'Output: ' . $hitCount;
?>

您需要取针,取第一个字符。。然后迭代每个haystack字符,直到找到匹配的字符。然后拿下下一块针,检查下一块干草堆是否匹配。。。继续,直到您获得针的完全匹配或确定匹配字符

提示:您可以使用
$string{0}
按索引访问字符串的各个字符,其中
0
是字符串中字符的从零开始的索引。

试试这个

$strone = 'arun sukumar';
$strtwo = 'a';

echo parsestr($strone, $strtwo);

function parsestr($strone, $strtwo)
{
    $len = 0;
    while ($strtwo{$len} != '') {
        $len++;
    }

    $nr = 0;

    while ($strone{$nr} != '')
    {
        if($strone{$nr} != ' ')
        {
            $data[$nr] = $strone{$nr};
        }
        $nr++;
    }

    $newdata = $data;

    if($len > 1)
    {
        $newdata = array();
        $j = 0;
        foreach($data as $val)
        {
            $str .= $val;
            if($j == ($len -1))
            {
                $newdata[] = $str;
                $str = '';
                $j = 0;
            }
            else
                $j++;
        }
    }
    $i = 0;

    foreach($newdata as $val)
    {
        if($val == $strtwo)
        {
            $i++;
        }
    }
    return $i;
}
$string = 'Arun sukumar'; 

$sub_string = 'a';

$count = 0;
for($i=0;$i < strlen($string); $i++){

    $flag = 0;
    $j=0;
    if(strtolower($string[$i]) == $sub_string[$j])
    {
        //echo "match";
        $flag = 1;
        $k = $i;
        for(;$j< strlen($sub_string); $j++){//echo "[".$j . $k."] $count $flag";
            if(strtolower($string[$k]) != $sub_string[$j]){
                $flag = 0;
                break;
            }
            $k++;
        }//echo "<br> $flag";
    }
    if($flag == 1){
        $count++;
        $flag = 0;
    }
}

echo $count;

?>
$string='Arun sukumar';
$sub_string='a';
$count=0;
对于($i=0;$i$flag”;
}
如果($flag==1){
$count++;
$flag=0;
}
}
echo$count;
?>

我想到了通过字符循环…不想使用内置的PHP函数吗?不要使用PHP。这是采访中提出的问题。。。。。。。。。。我想知道它背后有什么逻辑吗?是的,这当然是一个家庭作业问题,
strtolower
strlen
、和
substr
都是内置的PHP函数。OP所寻找的是不可能的。他必须使用至少两个内置函数来实现他的目标。如果他想要几十行的话,他可以只使用strtolower。@Dark:不,你可以用基本的语言结构。那样做毫无意义。。除了学术练习,我需要没有任何内置功能的。这是在一次采访中被问到的,有什么答案吗?@Dark:可以对字符串进行迭代。空索引将返回
“\0”
,因此不需要strlen。strtolower可以由
if/chr(ord($c)&0xDF)
替换。尽管如此,这还是毫无意义的。您能否简单介绍一下上述问题的示例
$string{0}
已被弃用。您应该使用
$string[0]
。虽然欢迎使用此代码段,并可能提供一些帮助,但这将说明如何以及为什么解决此问题。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。谢谢@TobySpeight。我是新来的。我想知道关于解释,我应该在代码中添加注释吗?最好写一个介绍性的描述,并且只在为自己编写代码时对代码进行注释。您的答案似乎显示了如何迭代字符串,在每个索引处执行比较,因此这可能是解释的开始。如果我错了,那么描述我是如何错的将是完美的!谢谢@TobySpeight