Wie kann ich das kürzer schreiben? [geschlossen]

  • Dieser Code wiederholt sich. Wie kann ich es kürzer machen? Vielleicht mit einer anonymen Funktion oder etwas?

     foreach ($value as $wrong) {
      if (starts_with($wrong, '%') and ends_with($wrong, '%')) {
        $wrong = trim($wrong, '%');
        if (contains($address, $wrong)) {
          $corrected_address = str_replace($wrong, $key, $address);
          break;
        }
      }
      else {
        $wrong = trim($wrong, '%');
        if (ends_with($address, $wrong)) {
          $corrected_address = str_replace($wrong, $key, $address);
          break;
        }
      }
    }
     

    Vielen Dank

    22 November 2011
    Book Of ZeusRoccivic
3 answers
  • Hier ist meine kürzere Version:

     foreach ($value as $wrong) {
       $both  = starts_with($wrong, '%') && ends_with($wrong, '%');
       $wrong = trim($wrong, '%');
       if ($both ? contains($address, $wrong) : ends_with($address, $wrong)) {
          $corrected_address = str_replace($wrong, $key, $address);
          break;
       }
    }
     

    $both wird wahrscheinlich umbenannt etwas beschreibender.

    22 November 2011
    brianreavis
  • Wie wäre es damit:

     foreach ($value as $wrong) { 
      $wrong = trim($wrong, '%');
    
      if (starts_with($wrong, '%') && ends_with($wrong, '%')) { 
    
        if (contains($address, $wrong)) { 
          $corrected_address = str_replace($wrong, $key, $address); 
          break; 
        } 
    
      }elseif (ends_with($address, $wrong)) { 
          $corrected_address = str_replace($wrong, $key, $address); 
          break; 
      } 
    } 
     
    22 November 2011
    F21
  • Sie brauchen keine Schleife, wenn Sie nach dem ersten brechen. Sie können array_filter verwenden, um die Übereinstimmungen zu ermitteln und dann mit dem ersten etwas zu tun array_map nimmt den Callback zuerst und das Array den zweiten, aber Array_filter macht das rückgängig? Es sind solche Dinge, die mich dazu bringen, PHP zu vermeiden.

    22 November 2011
    pguardiario