我正在尝试将此 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;
}
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消