3

我在尝试在循环内运行代码时遇到问题,我的循环由一个函数组成。

这是我的编码:

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++){
$val = $new[$i];



function myfunction($value) {   
    //Do something
}

echo $val;
}

问题是代码只输出我数组中的第一个值。我很困惑,我不应该在循环内声明一个函数吗?

4

9 回答 9

8

您的代码最终会出现致命错误,因为在第二次迭代时它会尝试重新声明 function myfunction。这就是为什么它只打印数组的第一个值。

为了避免该致命错误,您可以检查该函数是否已使用function_exists()如下函数定义:

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
    $val = $new[$i];
    if(!function_exists('myfunction'))
    {
        function myfunction($value) {
            //Do something
        }
    }
    echo $val;
}

PHP is a scripting language and it is syntactically correct to declare a function inside for loop or inside if statement, but it is a bad practice and can cause a lot of errors afterwards.
The best way is to declare a function outside loop, and, if needed, call it from within a loop like this:

<?php
function myfunction($value) {
    //Do something
}

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
    $val = $new[$i];
    myfunction($value); //may you was intended to pass $val here?
    echo $val;
}
于 2012-10-17T07:56:54.577 回答
6

不要在循环内声明函数,在循环之前声明它,然后在循环内调用它myFunction($value);

于 2012-10-17T07:46:07.650 回答
5

该函数应该在一个单独的过程中

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++)
{
   $val = $new[$i];
   myfunction($val)
   echo $val;
}

那么这是你的功能

function myfunction($value) 
{   
    //Do something
}
于 2012-10-17T07:46:38.617 回答
1
  • 在循环外声明函数
  • 要么从函数返回一个值,要么让函数输出数据

例如:

function myfunction($value) {   
  //Do something
  echo $value;
}

$new = array(1,2,3,4);
for($i=0;$i<=3;$i++) {
  myfunction($new[$i]);
}
于 2012-10-17T07:46:17.197 回答
0

这不是正确的做法......首先在循环外声明函数,然后在循环中调用函数

function myfunction($value) {   
    //Do something
}


$new = array(1,2,3,4);
for($i=0;$i<=3;$i++){
   $val = $new[$i];
   myfunction( $val);  //call function where u wanted... here (in your  case)
   echo $val;
}
于 2012-10-17T07:47:47.273 回答
0

我假设您想打印出数组的前 4 个元素。做这样的事情

function myfunction() {   
  $new = array(1,2,3,4);
  for($i=0;$i<=3;$i++){
    $val = $new[$i];
    echo $val;
  }
}

myfunction();
于 2012-10-17T07:48:55.540 回答
0

您应该在循环外声明该函数

function myfunction($value) {    
    return ($value + 25); // an example
}

$new = array(1,2,3,4); 
for($i = 0; $i < count($new); $i++){
    echo myfunction($new[$i]); 
} 

此外,您应该将循环设置为从 0 到数组的末尾,因此如果数组中的条目超过 4 个,则代码应该没问题

于 2012-10-17T07:49:14.340 回答
0

You can declare an anonymous function instead:

for ($i=0; $i<=3; $i++) {
    // code
    $myFunction = function($value) { /* code */ }
    $myFunction($val);
    // code
}
于 2017-08-24T03:14:13.470 回答
-3

你不应该在循环中声明函数......

于 2012-10-17T07:49:49.877 回答