Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Próbuję sobie napisać skrypt, który będzie mi przeliczał Bajty na MegaBajty i wyżej.
funkcje converter_divisor działa dobrze
var_dump($helper);
osiąga takie wartości jakie powinien, ale po zwróceniu tej zmiennej
$worth=converter_divisor($value, 0);
nie jest ona przypisywana do zmiennej $worth.
Poniżej cały skrypt, jeżeli mógłby ktoś zerknąć i podpowiedzieć mi, co robię nie tak to byłbym wdzięczny.
<?php echo "start"; echo converter(1234567890)."<br/>"; echo "stop"; function converter($value){ $unit=array('B','KB','MB','GB','TB'); $worth=converter_divisor($value, 0); var_dump($worth); } function converter_divisor($value, $sentinel){ while(($value/1024)>1) { converter_divisor(($value/1024),($sentinel+1)); $helper=array($value,$sentinel); return $helper; } echo $value." ".$sentinel."<br/>"; $helper=array($value,$sentinel); var_dump($helper); return $helper; } ?>
Offline
Taki wynik Ciebie interesuje?
start 1.1497809458524 3 array(2) { [0]=> float(1.1497809458524) [1]=> int(3) } WORTH = array(2) { [0]=> int(1234567890) [1]=> int(0) } stop
Offline
Tą wartość próbuję zwrócić:
1.1497809458524 3
niestety, jak zauważyłeś do worth przypisuje mi całkiem, co innego i nie rozumiem dlaczego.
W kolejnym kroku będę próbował zaokrąglić tą liczbę do 2 miejsc po przecinku.
var_dumpy - są po to, żebym widział, co się dzieje.
docelowo ich nie będzie.
będę zwracał wynik w postaci
return $worth[0].$unit[$worth[1]];
Ostatnio edytowany przez Paad (2012-09-26 21:22:08)
Offline
To błąd logiczny. Należy zmienić funkcję, aby była pewność, że zwraca wartość we właściwym miejscu.
http://ideone.com/lGzUF
ps. dziwna języka ta php ;)
ps2. Jeśli nie chcesz mieć takich problemów to zainstaluj sobie jakieś środowisko do deweloperki w php z debuggerem. wszelakie var_dumpy są dobre, ale do "kilkulinijkowców".
Ostatnio edytowany przez czadman (2012-09-27 09:04:46)
Offline
Hmmmm.... funkcja converter wywołuje funkcję converter_divisor.
W funkcji converter_divisor jest użyte return.
Ale w funkcji converter już nie, masz tylko proste przypisanie do zmiennej worth i powrót.
Spróbuj dać tak:
function converter($value){ $unit=array('B','KB','MB','GB','TB'); $worth=converter_divisor($value, 0); var_dump($worth); return $worth; }
bo rozumiem, że w $worth jest to co ma być zwrócone?
A tak to chyba zmienna $worth jest lokalnie modyfikowana ale na poziomie głównym jest niewidoczna/niezmieniona.
Przepraszam, jeśli bredzę...
TheAnt
Offline
TheAnt napisał(-a):
Hmmmm.... funkcja converter wywołuje funkcję converter_divisor.
W funkcji converter_divisor jest użyte return.
Ale w funkcji converter już nie, masz tylko proste przypisanie do zmiennej worth i powrót.
[...]
Nie zwracam $worth w funkcji converter, bo funkcja converter_divisor przypisuje mi do $worth, błędny wynik (widzę to już po var_dump).
a jak już będę zwracał to tak jak pisałem wyżej
return $worth[0].$unit[$worth[1]];
Dzięki czadman zaraz pomyślę - uparłem się, żeby zrobić to rekurencyjnie i chyba niepotrzebnie ;) ale próbuję dalej.
Offline