opiszę pokrótce swoją sytuację:
- przesyłam z poziomu klienta opis obrazka do PHP w formie ciągu hexowych opisów koloru kolejnych pixeli (np. fffdf8.ffffff.ffffff.ffffff.fefcf3 etc)
- ponieważ danych jest dużo, zaimplementowałem po stronie klienta prostą kompresję w rodzaju RLE, tzn. jeśli 3 kolejnych pixele mają taki sam kolor - powiedzmy ffffff, zapisuję to jako 3xffffff (przykładowy ciąg wygląda więc tak: fffdf8.3xffffff.fefcf3)
- żeby 'rozpakować' to po stronie serwera, używam następującej funkcji:
<?php function multiplyStrings($string, $multiplier) { $output = ''; $multiplier = (int) $multiplier; for($x=0;$x<$multiplier;$x++) { $output .= $string; } return $output; } ?>
i tu pojawia się problem... $multiplier (czyli n z nxffffff) po skonwertowaniu do int zawsze ma wartość zero! (jeśli jednak wypiszę go jako string, ma poprawną wartość n)
nie mam pojęcia, dlaczego tak się dzieje, próbowałem też z intval(), ale to nie pomogło.
nie jest to też na pewno problem danych przesyłanych od klienta, bo testowałem to również z wartością $dataset wpisaną do skryptu.
będę bardzo wdzięczny za wszelką pomoc.
gdyby ktoś chciał potestować, poniżej uproszczony kod zaznaczający problem.
<?php $dataset = "ffffff.311xfefbed.f0d662.edcc3e.ecca34.ecca37.eccc3d.f1d86a.f4e18c.f9eebd.f
fffff.4xfefbf0.f0d765.ebc729.ebc931.eecf49.f7eaad.fefcf3.faefc2.f7e7a5.efd358.eec
f48.f6e59d.fffefa.ffffff"; function multiplyStrings($string, $multiplier) { $multiplierInt = (int) $multiplier; return '<b>'.$multiplier.': '.$multiplierInt.'</b>'; } ?>