/** * @group unit */ public function testCastObjectToArray() { $object = new CastObjectToArrayTest(); $object->dynamicVariable = 'dynamicVariable'; $objectArray = tx_mklib_util_Array::castObjectToArray($object); $this->assertEquals('publicVariable', $objectArray['publicVariable'], 'publicVariable falsch gecastet'); $this->assertEquals('protectedVariable', $objectArray['protectedVariable'], 'protectedVariable falsch gecastet'); $this->assertEquals('privateVariable', $objectArray['privateVariable'], 'privateVariable falsch gecastet'); $this->assertEquals('publicStaticVariable', $objectArray['publicStaticVariable'], 'publicStaticVariable falsch gecastet'); $this->assertEquals('protectedStaticVariable', $objectArray['protectedStaticVariable'], 'protectedStaticVariable falsch gecastet'); $this->assertEquals('privateStaticVariable', $objectArray['privateStaticVariable'], 'privateStaticVariable falsch gecastet'); $this->assertEquals('dynamicVariable', $objectArray['dynamicVariable'], 'dynamicVariable falsch gecastet'); }
/** * Prüft ob ein Wort der Wortliste im gegebenen String vorkommt * * @param string $word * @param $wordlist * @param $greedy | alle oder nur ein Treffer? * @param $sanitizeWord | alle Sonderzeichen vor der Prüfung entfernen * * @return null || array || string */ private function checkForWordInWordlist($word, $wordlist, $greedy = true, $sanitizeWord = true) { //wenn es kein array ist, dann is die wordlist leer if (!is_array($wordlist)) { return NULL; } if ($sanitizeWord) { //alle Sondzeichen entfernen $utilString = tx_rnbase::makeInstance('tx_mklib_util_String'); $word = $utilString->html2plain($word); $word = $utilString->removeNoneLetters($word); } //die einzelnen Wörter prüfen foreach ($wordlist as $entry) { //damit in DB nicht für jedes Wort ein Eintrag angelegt werden muss, //werden komma-separierte Wörterlisten innerhalb des Wort-Feldes //ebenfalls unterstützt --> str_replace $sWordlist .= $sEntry = str_replace(',', '|', $entry->getWord()); // '\b' bedeutet das nur nach ganzen Wörtern gesucht wird. ist f**k //geblacklisted wird sfuck nicht bemängelt if (!$greedy && preg_match('/\\b(' . $sEntry . ' )\\b/i', $word, $matches)) { //nur einen treffer? return $matches[0]; } $sWordlist .= '|'; //für die regexp } // '\b' bedeutet das nur nach ganzen Wörtern gesucht wird. ist f**k //geblacklisted wird sfuck nicht bemängelt if ($greedy && preg_match_all('/\\b(' . $sWordlist . ')\\b/i', $word, $matches)) { //alle treffer? tx_rnbase::load('tx_mklib_util_Array'); //preg_mactch_all gibt ein array zurück, was auch viele leere Werte für die Nicht-Treffer enthält. Diese stören und werden bereinigt return tx_mklib_util_Array::removeEmptyArrayValuesSimple($matches[0]); } //kein Treffer!!! return null; }
/** * Erzeugt einen technisch richtigen Float-Wert. * Bei floatval() werden die Eistellungen über setlocal beachtet. * Wurde das beispielsweise auf Deutsch gesetzt, wird aus 5.45 > 5,45. * Das Komma macht dann Beispielsweise DB-Abfragen kaputt/fehlerhaft. * * @author Michael Wagner <*****@*****.**> * * @param string $number * @param array $config * @return string der float wert als String. */ public static function floatVal($number, array $config = array()) { $float = self::parseFloat($number); $string = (string) $float; // Hier ist die aktuelle Definition für die Umwandlung von Floats enthalten $local = localeconv(); // Das sind die Zeichen, mit denen wir die aus der localeconv ersetzen. $config = array_merge(array('decimal_point' => '.', 'mon_decimal_point' => '.', 'thousands_sep' => '', 'mon_thousands_sep' => '', 'int_curr_symbol' => '', 'currency_symbol' => '', 'positive_sign' => '', 'negative_sign' => '-'), $config); // Erstmal ersetzen wir die Leerzeichen! $string = preg_replace('/\\s/', '', $string); // Jetzt ersetzen wir Currencies und Signs! (EUR $ + -) $string = str_replace(array($local['int_curr_symbol'], $local['currency_symbol'], $local['positive_sign'], $local['negative_sign']), array($config['int_curr_symbol'], $config['currency_symbol'], $config['positive_sign'], $config['negative_sign']), $string); // Jetzt wird es komplizierter: // Wir müssen anhand eines pregreplace, die Werte teilen. // Das machen wir, da wir mit string replace aus 4.999,95 // immer 4.999.95 oder 4,999,95 machen würden. $mapping = array($local['mon_decimal_point'] => $config['mon_decimal_point'], $local['mon_thousands_sep'] => $config['mon_thousands_sep'], $local['decimal_point'] => $config['decimal_point'], $local['thousands_sep'] => $config['thousands_sep']); // Wir entfernen leere Einträge. // Die können nicht ersetzt werden und verursachen Fehler tx_rnbase::load('tx_mklib_util_Array'); $preg = tx_mklib_util_Array::removeEmptyValues(array_keys($mapping)); $preg = '/(' . implode('|\\', $preg) . ')/'; // Wir splitten nun die Werte auf. // Dabei werden alle Trennzeichen mitgegeben und leere Werte entfernt! $matches = preg_split($preg, $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); // Wir ersetzen nun die entsprechenden Zeichen. foreach ($matches as &$part) { foreach ($mapping as $from => $to) { if ($part == $from) { $part = $to; break; } } } // Jetzt nur noch zusammenführen und Fertig! return implode('', $matches); }