在php中使用for循环填充数组

时间:2014-11-17 23:04:38

标签: php arrays

我需要在数组中添加*。这就是我在javaScript中的表现。

function makeStarString(grade) {

    var starArray = [];
    var starString = "";
        for (var i = 0; i < grade; i++){
            starArray[i] = "*";
            starString = starString.concat(starArray[i]);
        }
    return starString;
}

javascript版本工作正常,但我不能使它与PHP一起工作。 这就是我用php得到的。

function makeStarString($varGrade) {

    $starArray = array ();
    $starString = "";
        for ($i = 0; $i < strlen($varGrade); $i++){

            $starArray($i) = $star;
            $starString = $starString.(starArray(i));
        }   

    return $starString;
}

我收到此错误&#34;致命错误:无法在写入上下文中使用函数返回值&#34;因为行$starArray($i) = $star;

我发送给函数的参数是一个Integer。 因此该函数的目的是,如果我向函数发送5,它将返回*****

如何修复我的php功能?

5 个答案:

答案 0 :(得分:2)

使用$starArray[$i]代替$starArray($i)starArray(i)

答案 1 :(得分:0)

  • 在变量中使用strlen($varGrade)通常是个好主意,因为foreach循环必须计算每次迭代的长度。这可能会带来性能问题。
  • 您的$star变量未定义,因此我不知道您要将它放在那里。修改自己的代码。
  • 最后,您可以使用.=运算符向现有字符串添加内容。

    function makeStarString($varGrade) {
    
    $starArray = array ();
    $starString = "";
    $length = strlen($varGrade);
        for ($i = 0; $i < $length; $i++){
    
            $starArray[$i] = $star;
            $starString .= $starArray[$i];
            // equivalent to $starString = $starString . $starArray[$];
        }   
    
    return $starString;
    }
    

<强>更新

如果您向该函数发送int,则不需要strlen

function makeStarString($varGrade) {

    $starArray = array ();
    $starString = "";
        for ($i = 0; $i < $varGrade; $i++){

            $starArray[$i] = $star;
            $starString .= $starArray[$i];
            // equivalent to $starString = $starString . $starArray[$];
        }   

    return $starString;
}

答案 2 :(得分:0)

这是你需要的吗?


function makeStarString($varGrade) {
    $starString = '';
    for ($i = 0; $i < $varGrade; $i++) {
            $starString .= '*';
    }   

    return $starString;
}

关于我的修改的一些注释。

  1. 我不明白为什么你首先需要那个$starArray数组。所以我跳了它。

  2. 我修改了你的缩进。奇怪的缩进可以使非常简单的代码看起来比实际复杂得多。 :)

  3. 您应该询问$i < $varGrade,而不是$i < strlen($varGrade)。如果您通过strlen()询问,则会获得您输入的数字的宽度。例如,strlen(55)为2,strlen(555)为3,strlen(5555)为4等。 - 忽略它是一个数字的事实。您只是希望for循环为您提供$varGrade多个星标,因此不需要strlen()

  4. 作为一个细节,我使用单引号而不是双引号用于字符串,因为它们更轻(PHP不解析其中的变量)。

  5. 我希望它有所帮助。

答案 3 :(得分:0)

此代码应该可以使用

function makeStarString($varGrade) {

    $star = "*"; // star variable wasn't defined to.
    $starArray = array ();
    $starString = "";
        for ($i = 0; $i < $varGrade; $i++){

            $starArray[$i] = $star; // [ ] instead of ( ) 
            $starString .= ($starArray[$i]); // $a.=$b instead of $a=$a+$b, added the $ at the i and [ ] instead of ( ) 
        }   

    return $starString;
}

答案 4 :(得分:0)

如果你真的需要阵列中的星星,你就不需要使用循环:

$starArray = array_fill(0, $varGrade, '*');

如果您需要将数组转换为字符串:

$starString = implode('', $starArray);

但如果你真的不需要使用星球阵列,那么使用str_repeat会更容易:

str_repeat('*', $varGrade);