我有绳子
[Param]
我想写一个函数
$str = 'street';
此处output($str, $n)
是给定字符串中出现次数的计数。
我不想使用任何PHP内置函数,例如先将其转换为数组或$n
或任何其他函数,并希望在可能的情况下仅使用pure进行循环
将$ n视为2,预期输出为:-
t-> 2
e-> 2
substr_count
因此,在这里,我已经尝试了上面的代码,并且可以正常工作,但是在这里,我使用了str_split函数。我想避免使用它,仅在可能的情况下才需要使用循环来完成它。
我不擅长格式化问题,请为此留白。
答案 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
,则可以将while
与isset
一起使用循环:
$i = 0;
while(isset($input[$i])) {
if(!isset($outputs[$input[$i]])){
$outputs[$input[$i]] = 1;
} else {
$outputs[$input[$i]] += 1;
}
$i++;
}
答案 1 :(得分:1)
通过使用可以将字符串作为数组访问的事实,可以同时删除str_split
和str_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";
}
}
}