/**
  * Prüfen ob alle leeren Elemente außer dem array gelöscht werden
  * und keys unberührt bleiben
  */
 public function testRemoveEmptyValues()
 {
     $aArray = array('ich', 'bin', 1, '', 0, null, 'Array' => array(), 'Test', true, false);
     $aNoEmptyValues = tx_mklib_util_Array::removeEmptyValues($aArray);
     $this->assertTrue(is_array($aNoEmptyValues), 'No array given.');
     $this->assertEquals(count($aNoEmptyValues), 6, 'Wrong count of entries.');
     //auf die keys im zurück gegebenen und initialen array achten!!!
     $this->assertEquals('ich', $aNoEmptyValues[0], '1. wert falsch');
     $this->assertEquals('bin', $aNoEmptyValues[1], '2. wert falsch');
     $this->assertEquals(1, $aNoEmptyValues[2], '3. wert falsch');
     $this->assertEquals(array(), $aNoEmptyValues['Array'], '4. wert falsch');
     $this->assertEquals('Test', $aNoEmptyValues[6], '5. wert falsch');
     $this->assertEquals(true, $aNoEmptyValues[7], '6. wert falsch');
 }
 /**
  * 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);
 }