如果 IF 语句为真,则跳过 array_map 函数的迭代

Skip iteration of array_map function if IF statement True

有没有办法像在普通 for 循环中那样 breakcontinue 内置方法 array_map() 的迭代?

例如:

array_map(function (String s) {
    if (condition is met){
        continue;
    }
    return stuff;
}, $array_to_map);

您可以通过简单地返回原始值来模拟 continue

array_map(function($var){
  if(condition)
    return $var; //continue
  return $transformedValue;
}, $arr);

然而实际上没有办法 break(除了令人厌恶的事情,比如使用 StopIteration 异常 class)

没有。 array_map returns 一个与原始长度相同的数组,因此您不能跳过任何项目。即每次迭代都需要返回一些东西。

您可以使用 array_filter 删除某些项目。

$results = array_map(function (String s) {
    if (condition is met){
        //do stuff 
    } else {
        return false;
    }
    return stuff;
}, $array_to_map);

$results 将包含一个数组,其中元素的原始数量为 $array_to_map,仅当条件失败时数组元素设置为 false

然后做。

$array_with_elements_remove = array_filter($results, function($e){
    return $e; //when this value is false the element is removed.
});

你可以这样试试:

$newArrayWithIds = [];

array_map(function (int $id) use ($newArrayWithIds): void {
   if($id === 0) {
     return;
   }
   $newArrayWithIds[] = $id; 
}, $yourArrayWithIds);