Я хочу foreach
возвращать массивы, но он просто возвращает один массив. Но array_map with
тот же код делает.
foreach
,foreach
ведет себя иначе, чем array_map
,Внутри файл (Userdata.php)
Reme:[email protected]
george bush:[email protected]
obama:[email protected]
С помощью 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] => [email protected] )
Так как 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()
является функцией, которая зацикливает / повторяет каждый элемент в массиве, выполняя «Перезвоните» функция против каждого элемента. Вы возвращаете функцию «обратного вызова», которая действует одновременно на один элемент массива и вызывается несколько раз: array_map()
по одному разу для каждого элемента массива по очереди.
return
в вашем «обратном вызове» просто возвращает измененное значение для этого один отдельный элемент (текущий элемент в array_map()
цикл) к array_map()
функция …. это говорит array_map()
каким должно быть значение нового элемента.
array_map()
Сама функция не может быть прервана: она будет продолжать итерацию по следующему элементу, посылая это по очереди в функцию «обратного вызова», пока это не будет сделано для каждого элемента в массиве.
Других решений пока нет …