Php 我正在尝试获取字符串中字符的出现次数
下面是我尝试的代码,其中count显示不正确。 请帮我找到我不懂逻辑的地方。 我附上代码,我已经尝试到目前为止。 注:-我不打算使用php的更多内置函数,所以我创建了字符串长度函数Php 我正在尝试获取字符串中字符的出现次数,php,arrays,string,Php,Arrays,String,下面是我尝试的代码,其中count显示不正确。 请帮我找到我不懂逻辑的地方。 我附上代码,我已经尝试到目前为止。 注:-我不打算使用php的更多内置函数,所以我创建了字符串长度函数 error_reporting(E_ALL); $string = "ssddk"; function checkString($addinString, &$stringBK) { if (empty(count($stringBK))) { $stringBK[] = $addi
error_reporting(E_ALL);
$string = "ssddk";
function checkString($addinString, &$stringBK) {
if (empty(count($stringBK))) {
$stringBK[] = $addinString;
return false;
}
foreach ($stringBK as $key => $val) {
if ($addinString == $val) {
return true;
}
}
$stringBK[] = $addinString;
return false;
}
for ($i = 0; $i < checkstrlength($string); $i++) {
$count = 0;
for ($j = 0; $j < checkstrlength($string); $j++) {
if ($string[$i] == $string[$j]) {
if (checkString($string[$i], $stringBK)) {
continue 2;
}
$count++;
echo "Column => " . $string[$j] . " for count" .$count . "<br>";
}
}
}
function checkstrlength($string) {
$count = 0;
for ($i = 0; $string[$i] != ""; $i++) {
$count++;
}
return $count;
}
我期待它作为,
好的,这里有一些东西要看 checkstrlength具有以下循环
for ($i = 0; $string[$i] != ""; $i++) {
正式地说,我们通常查看字符串中的\0终止字符来终止循环。但在PHP中,一切都是字符串。因此,\0现在是要匹配的字符串,而不是字符匹配。更好的是,我们做一个isset检查来停止循环。因此,代码看起来像:
for ($i = 0; isset($string[$i]); $i++) {
$length = checkstrlength($string);
for ($i = 0; $i < $length; $i++) {
for ($j = $i; $j < $length; $j++) {
function checkString($addinString, &$stringBK) {
foreach ($stringBK as $key => $val) {
if ($addinString == $val) {
return true;
}
}
$stringBK[] = $addinString;
return false;
}
第二个问题是您没有缓存从checkstrlength获得的结果。去做吧。此外,还可以从$i本身开始内部循环。没有必要从头再来。因此,for循环看起来像:
for ($i = 0; isset($string[$i]); $i++) {
$length = checkstrlength($string);
for ($i = 0; $i < $length; $i++) {
for ($j = $i; $j < $length; $j++) {
function checkString($addinString, &$stringBK) {
foreach ($stringBK as $key => $val) {
if ($addinString == $val) {
return true;
}
}
$stringBK[] = $addinString;
return false;
}
现在,在嵌套循环中,将其添加到内部循环外部的$stringBK中,因为当字符匹配时,没有必要检查内部循环。这是因为如果访问了某个字符,为什么要初始化内部循环呢。只需在上面进行检查,然后继续搜索和计数。还要注意,在内部循环中有echo语句,这是没有意义的,因为我们还没有完成计数。让我们这样做,并在最后的内部循环外打印它。片段如下:
for ($i = 0; $i < $length; $i++) {
$count = 0;
if (checkString($string[$i], $stringBK)) {
continue;
}
for ($j = $i; $j < $length; $j++) {
if ($string[$i] == $string[$j]) {
$count++;
}
}
echo "Column => " . $string[$i] . " for count : " .$count,PHP_EOL;
}
最后的代码演示:我不打算使用php的任何内置函数,所以我创建了字符串长度函数。我已经可以看到空函数和计数函数了。可能有帮助我正在编辑这篇文章谢谢:顺便问一下,checkString做了什么?它会检查字符是否已经找到,这样就不会在下一行迭代中再次计数了。@Sam很高兴我能帮上忙:如果你在寻找更快的方法,