PHP,foreach 不是 return 数组,而是 array_map 具有相同代码 return 的数组

PHP, foreach doesnt return an array but array_map with same code returns an array

我想要 foreach 到 return 数组,但它只是 return 一个数组。但是 array_map with 相同的代码。


文件中 (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 ) 

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

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

编辑

回答你的问题"Why doesn't a return from array_map terminate the iteration?"

因为array_map()是一个loops/iterates数组中每个元素的函数,对每个元素执行"callback"函数。你的 return 在 "callback" 函数中,它一次作用于一个单独的数组元素,并被 array_map() 调用多次,依次对数组的每个元素调用一次。

您的 "callback" 中的 return 只是 return 为 一个 单个元素(当前元素在array_map() 循环)到 array_map() 函数....它告诉 array_map() 新元素值应该是什么。

array_map() 函数本身不能被中断:然后它将继续遍历下一个元素,依次将其发送到 "callback" 函数,直到它对中的每个元素都这样做数组。