使用foreach循环返回数组

时间:2016-01-28 09:05:38

标签: php arrays foreach

我想问一下 - 如何在foreach循环中返回/生成数组?

这是我的代码

function getAllUsers() {
   $dir = "users/";
   $fl = scandir($dir);
   $cnt = 0;
   foreach (scandir($dir) as $fl) {
       if ($fl !== '.') {
           if ($fl !== '..') {
                if ($fl !== 'index.php') {
                    $pr = $fl;
                    $fl1 = scandir($dir . '/' . $fl);
                    $cnt++;
                    return $fl1[3]; //Here I want a array for file inside 'users\'.
                }
           }
       }
   }
}

感谢您的回答。

3 个答案:

答案 0 :(得分:3)

基本上:你不能。 使用return时,current函数返回值并停止执行。

根据定义,

返回函数的结尾。

但您可以保存要在数组中返回的数据,然后返回整个内容:

function getAllUsers() {
   $dir = "users/";
   $fl = scandir($dir);
   $cnt = 0;
   $result = []; //initiating the array
   foreach (scandir($dir) as $fl) {
       if ($fl !== '.') {
           if ($fl !== '..') {
                if ($fl !== 'index.php') {
                    $pr = $fl;
                    $fl1 = scandir($dir . '/' . $fl);
                    $cnt++;
                    $result[] = $fl1[3]; //adding your value to the array
                }
           }
       }
   }
   return $result;
}

编辑:如果您的PHP版本涉及 $ result = []; ,您可以使用“旧”样式 $ result = array(); 而不是< / p>

答案 1 :(得分:2)

生成器:PHP解决方案&gt; = 5.5。

如果你想让函数从函数返回循环中每个元素的值,请使用生成器:

/**
 * @return Generator|Iterator
 */
function getAllUsers() {
    $dir = "users/";
    $fl = scandir($dir);
    $cnt = 0;
    foreach (scandir($dir) as $fl) {
        if ($fl !== '.') {
            if ($fl !== '..') {
                if ($fl !== 'index.php') {
                    $pr = $fl;
                    $fl1 = scandir($dir . '/' . $fl);
                    $cnt++;
                    yield $fl1[3]; //Here I want a array for file inside 'users\'.
                }
            }
        }
    }
}

// Loop over
foreach (getAllUsers() as $file) {

}

// Or one at a time
$generator = getAllUsers();
$file1 = $generator->current();

此处的其他解决方案更为可行,但此解决方案主要用于实现IteratorAggregate接口或创建协同例程。

答案 2 :(得分:1)

您可以使用数组来实现此目的。像下面..

function getAllUsers() {
   $dir = "users/";
   $fl = scandir($dir);
   $cnt = 0;
   $array = array();
   foreach (scandir($dir) as $fl) {
       if ($fl !== '.') {
           if ($fl !== '..') {
                if ($fl !== 'index.php') {
                    $pr = $fl;
                    $fl1 = scandir($dir . '/' . $fl);
                    $cnt++;
                    $array[$fl] = $fl1[3]; //Push values in array for each user.                    
                }
           }
       }
   }
  return $array;
}

希望这会有所帮助