in_array liefert konfuses Ergebnis

tklustig

Erfahrenes Mitglied
Hallo Leute, folgender Code ergibt folgende var_dump() Resultate innerhalb der Kondition. Wie kann das sein? Bin echt verwirrt ob dieser Ausgabe. Eigentlich dürfte die Kondition doch überhaupt nicht TRUE sein o_O
var_dump():
Code:
X:\xampp\htdocs\yii2_ErkanImmo\backend\controllers\BankverbindungController.php:61:
array (size=3)
  0 => string 'J' (length=1)
  1 => string 'K' (length=1)
  2 => string 'K' (length=1)
X:\xampp\htdocs\yii2_ErkanImmo\backend\controllers\BankverbindungController.php:62:string 'J' (length=1)
X:\xampp\htdocs\yii2_ErkanImmo\backend\controllers\BankverbindungController.php:63:
array (size=10)
  0 => int 0
  1 => int 1
  2 => int 2
  3 => int 3
  4 => int 4
  5 => int 5
  6 => int 6
  7 => int 7
  8 => int 8
  9 => int 9

Code:
PHP:
$string2Array = str_split($model->bic);
$zifferArray = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
      for ($i = 0; $i < count($string2Array); $i++) {
         if (in_array($string2Array[$i], $zifferArray)) {
              $wrongInput = true;
              $message = 'Die BIC darf keine Ziffern enthalten.';
              $this->message($message, 'Warnung', 1500, Growl::TYPE_WARNING);
              var_dump($string2Array);
              var_dump($string2Array[$i]);
              var_dump($zifferArray);
              die();
              return $this->render('create', ['model' => $model, 'id' => $id]);
           }
        }
 
Weiß jetzt, warum die php-Funktion falsche Ergebnisse liefert: Die Werte im Zahlenarray müssen als Strings initialisert werden. Scheint ein Bug in der Zend Engine vorzuliegen. Was meint Ihr?
 
Jepp, sollten Strings sein, wenn $model->bic ein String ist.
Ich würde aber eh ein RegEx machen und keine Schleife
PHP:
if(preg_match('/\d/', $model->bic) === 1){
    $wrongInput = true;
    $message = 'Die BIC darf keine Ziffern enthalten.';
    $this->message($message, 'Warnung', 1500, Growl::TYPE_WARNING);
    die();
}
 
Jepp, sollten Strings sein, wenn $model->bic ein String ist.
Ich würde aber eh ein RegEx machen und keine Schleife
PHP:
if(preg_match('/\d/', $model->bic) === 1){
    $wrongInput = true;
    $message = 'Die BIC darf keine Ziffern enthalten.';
    $this->message($message, 'Warnung', 1500, Growl::TYPE_WARNING);
    die();
}
Warum ein RegEx? Ist das perofrmanter??
 
Sicher perfomanter als eine Schleife oder jedes zerlegen und prüfen.
RegEx ist eigentlich ziemlich performant. Vor allem ein so simpler Pattern
 
Zurück