1
votes

Ignorer l'itération de la fonction array_map si l'instruction IF est vraie

Existe-t-il un moyen de casser ou continuer une itération de la méthode intégrée array_map () comme vous le feriez normalement pour boucle?

Par exemple:

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


7 commentaires

Mais cela n'échouerait-il pas tout l'objectif?


Vous devriez probablement utiliser array_filter . Quelle est votre entrée et votre sortie?


Double possible de Sauter de array_walk


L'entrée @ggorlen est un objet de classe de chaînes La sortie est un tableau de chaînes


@ d1596 Il est utile que vous incluiez cela dans votre message. Je recommande de montrer un exemple reproductible minimal , sinon, cela ressemble à un xy problem car il semble que vous essayez d'utiliser un outil d'une manière pour laquelle il n'était pas censé être utilisé.


c'est ce que j'ai supposé, mais je voulais être sûr. Donc, une déclaration foreach serait mieux?


Désolé, je ne peux pas dire car je ne sais pas quel problème vous essayez de résoudre.


3 Réponses :


0
votes

Vous pouvez émuler continuer en renvoyant simplement la valeur d'origine.

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

Cependant, il n'y aurait aucun moyen de casser (sauf des choses dégoûtantes comme l'utilisation d'une classe d'exception StopIteration )


5 commentaires

Je ne pense pas que le deuxième retour se produira.


Bien sûr, mais pourquoi publier quelque chose comme ça? C'est trompeur. Le manuel sur les états de retour "Si elle est appelée depuis une fonction, l'instruction return met immédiatement fin à l'exécution de la fonction courante et renvoie son argument comme valeur de l'appel de fonction. Return termine également l'exécution d'une instruction eval () ou fichier de script. " - Si vous obtenez un vote défavorable, cela n'aurait pas été le mien, je le dis simplement.


Ce qui me dérange, c'est que vous êtes bogué avec les instructions return et non le fait que ni condition ni $ transformValue ne sont réellement déclarées.


"Te dérange? hein?


@FunkFortyNiner omettre les accolades sur un bloc à instruction unique est une mauvaise pratique, mais c'est permis.



4
votes

Non. array_map renvoie un tableau de la même longueur que l'original afin que vous ne puissiez pas ignorer un élément. c'est-à-dire que quelque chose doit être retourné à chaque itération.

Vous pouvez utiliser array_filter pour supprimer certains éléments.


0 commentaires

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

0 commentaires