如何在PHP中查找给定数字的字符串的出现字母

时间:2019-10-15 18:33:13

标签: php for-loop find-occurrences

我有绳子 [Param] 我想写一个函数 $str = 'street';

此处output($str, $n)是给定字符串中出现次数的计数。 我不想使用任何PHP内置函数,例如先将其转换为数组或$n或任何其他函数,并希望在可能的情况下仅使用pure进行循环

将$ n视为2,预期输出为:-

t-> 2

e-> 2

substr_count

因此,在这里,我已经尝试了上面的代码,并且可以正常工作,但是在这里,我使用了str_split函数。我想避免使用它,仅在可能的情况下才需要使用循环来完成它。

我不擅长格式化问题,请为此留白。

2 个答案:

答案 0 :(得分:1)

您可以改用for循环:

<?php

$input = 'street';
$n = 2;

function outputs($input, $n)
{
    $input = str_replace(' ', '', $input);

    $outputs = [];

    for($i = 0; $i < strlen($input); $i++)
    {
        if(!isset($outputs[$input[$i]])){
            $outputs[$input[$i]] = 1;
        } else {
            $outputs[$input[$i]] += 1;
        }
    }

    foreach ($outputs as $char => $number)
    {
        if ($number == $n) {
            echo $char . ' -> ' . $number;
            echo "\n";
        }
    }
}

outputs($input, $n);

如果您不能使用strlen,则可以将whileisset一起使用循环:

$i = 0;
while(isset($input[$i])) {
    if(!isset($outputs[$input[$i]])){
        $outputs[$input[$i]] = 1;
    } else {
        $outputs[$input[$i]] += 1;
    }
    $i++;
}

答案 1 :(得分:1)

通过使用可以将字符串作为数组访问的事实,可以同时删除str_splitstr_replace()函数,因此循环遍历字符串并按其位置选择每个字符。字符串...

function outputs($input, $n)
{
    $outputs = [];
    for ( $i = 0; $i < strlen($input); $i++ )
    {
        $char = $input[$i];
        if ( $char != ' ' ) {
            if(!isset($outputs[$char])){
                $outputs[$char] = 1;
            } else {
                $outputs[$char] += 1;
            }
        }
    }

    foreach ($outputs as $char => $number)
    {
        if ($number == $n) {
            echo $char . ' -> ' . $number;
            echo "\n";
        }
    }
}

要删除strlen(),只需检查字符串的每个元素是否都已设置...

function outputs($input, $n)
{
    $outputs = [];
    $i = 0;
    while ( isset($input[$i]))
    {
        $char = $input[$i];
        if ( $char != ' ' ) {
            if(!isset($outputs[$char])){
                $outputs[$char] = 1;
            } else {
                $outputs[$char] += 1;
            }
        }
        $i++;
    }

    foreach ($outputs as $char => $number)
    {
        if ($number == $n) {
            echo $char . ' -> ' . $number;
            echo "\n";
        }
    }
}