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/.

Użytkownik


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


Dzięcioł



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)
}
stopOffline

Użytkownik


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





Bicycle repairman






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

Użytkownik
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

Użytkownik


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