Witaj,
W sumie podsunąłeś pomysł z strrpos jaki ja znalazłem :-) Oto co wykonałem:
//-------------------------------------
// Prepare amount!
//-------------------------------------
if ( strrpos( $this->ipsclass->input['amount'], ',' ) !== FALSE ) {
$this->ipsclass->input['amount'] = substr_replace( ',', '.', strrpos( $this->ipsclass->input['amount'], ',' ), 1
); }
$this->ipsclass->input['amount'] = floatval( str_replace( ',', '', $this->ipsclass->input['amount'] ) );
Problem pojawił mi się przemyśliwując mój kod. Co się stanie jeżeli user wpiszę: 1,1,1 ? Zamieni na 11.1? Teraz to się zastanawiam jak zareaguje baza, jak ona doda taki wynik dla pola decimal(10, 2 )? Czy traktować jedną liczbę jako dziesiątki czy jedności?
PS. OK, podjąłem decyzję i zaokrąglę jedności do dziesiątek. Kod poprawiony dodam jak wrócę zasłużonego dziś piwka :-) Dziękuje za poradę!
Oto poprawiony kod. Proszę go ocenić i poddać wszelkie lepsze propozycje:
//-------------------------------------
// Prepare amount!
//-------------------------------------
if ( strrpos( $this->ipsclass->input['amount'], ',' ) !== FALSE ) {
$this->ipsclass->input['amount'] = substr_replace( $this->ipsclass->input['amount'], '.', strrpos( $this->ipsclass->input['amount'], ',' ), 1
);
list
( $integer, $digits ) = explode( '.', $this->ipsclass->input['amount'] );
switch ( $lenght )
{
case ( $lenght < 2 ):
$digits *= 10;
break;
case ( $lenght > 2 ):
$digits = substr( $digits, 0
, 2
); break;
case 0:
$digits = '00';
break;
}
$this->ipsclass->input['amount'] = implode( '.', array( $integer, $digits ) ); }
else
{
$this->ipsclass->input['amount'] = implode( '.', array( $this->ipsclass->input['amount'], '00' ) ); }
$this->ipsclass->input['amount'] = str_replace( ',', '', $this->ipsclass->input['amount'] );
Powinien podzielić kwotę na liczbę całkowitą i jedności. Jeżeli jedności jest mniejsza od 2 to mnoży razy 10, aby z 1 cyfry zrobić dziesiątki. A kiedy nie ma, po prostu dodaję string w postaci dwóch zer :-)
Pozdrawiam,
Largo