为了账号安全,请及时绑定邮箱和手机立即绑定

总是出现非数值

总是出现非数值

PHP
catspeake 2023-05-26 09:27:38
我正在尝试将此 Javascript 代码翻译成 PHP,但是当我这样做时,它会给我一条非数字值的消息。每次我 var dump 时count($fin),它都会给我一个与console.logJavaScript 中不同的索引。JavaScript 中的代码:var countAndSay = function(n) {    var str = '1';    for (var i=1; i < n; i++) {             var strArray = str.split('');        str ='';        var count = 1;        // Loop through current nth level line        for (var j=0; j < strArray.length; j++) {            // Next digit is different            if (strArray[j] !== strArray[j+1]) {                // Go to next non-matching digit                str += count + strArray[j];                count = 1;            } else {                count++;            }        }    }    return str;};console.log(countAndSay(45));这是我的 PHP 代码:function countAndSay($n) {     $str = "1";      for ($i = 1; $i < $n; $i++) {         $fin = str_split($str);        $str = "";        $len = count($fin);         $cnt = 1;        for ($j = 0; $j < $len; $j++) {             if ($fin[$j] !== $fin[$j +1]) { //error for non numeric value                $str += $cnt + $fin[$j];                 $cnt = 1;             } else {                $cnt++;             }        }    }    return $str; }echo countAndSay(9); 
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

在 JavaScript 中,该+运算符也是字符串连接运算符,而在 PHP 中+始终是算术加法。对于 PHP 中的串联,您应该使用.运算符。


其次,在 JavaScript 中,您可以在数组中使用超出范围的索引(这会为您提供一个值undefined),而在 PHP 中,它会产生异常。这在您的代码中发生 when $j+1is equal to $len,因此您应该添加一个条件来处理这种情况。


这是您需要更正的部分:


            // protect against out of range index:

            if ($j+1 >= $len or $fin[$j] !== $fin[$j +1])

            { 

                // Use string concatenation operator

                $str .= $cnt . $fin[$j]; 

                $cnt = 1; 

            } 


查看完整回答
反对 回复 2023-05-26
  • 1 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信