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
 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ł
 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
 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
 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
 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
 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