PHP,foreach不返回数组,但array_map具有相同的代码返回一个数组

时间:2015-05-08 09:46:09

标签: php arrays foreach array-map

我希望foreach返回数组,但它只返回一个数组。但array_map with代码相同。

  • foreach获取数组的正确方法是什么。
  • 为什么foreach的行为与array_map不同。

文件 (userdata.php)

Reme:Reme1991@jourrapide.com
george bush:GeorgeBush@gmail.com
obama:obama@gmail.com

使用 array_map

function registered_users(){
 $file_user = file('userdata.php');
    return array_map(function($user){
        return explode(':',$user);
    },$file_user);
    } //returns the exploded array correctly.

使用 foreach

function registered_users(){
     $file_user = file('userdata.php');
        foreach ($file_user as $user) {
            return explode(':',$user);
    }
 }// returns Array ( [0] => Reme [1] => Reme1991@jourrapide.com ) 

1 个答案:

答案 0 :(得分:3)

因为array_map()遍历数组中的所有元素.... foreach()会做同样的事情,除了你的return在第一次迭代时跳出它。

function registered_users(){
    $users = [];
    $file_user = file('userdata.php');
    foreach ($file_user as $user) {
        $users[] = explode(':',$user);
    }
    return $users;
}

修改

回答你的问题"为什么不从array_map返回终止迭代?"

因为array_map()是循环/迭代数组中每个元素的函数,所以对每个元素执行"回调" 函数。你的回归是在"回调" function,一次作用于一个单独的数组元素,由array_map()多次调用,依次为数组的每个元素调用一次。

你的"回调中的return"只是将一个个别元素(array_map()循环中的当前元素)的修改后的值返回给array_map()函数....它告诉{ {1}}新元素值应该是什么。

array_map()函数本身不会被中断:它将继续迭代下一个元素,然后将其发送到"回调"函数,直到对数组中的每个元素都这样做。