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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-09-26 13:52:20

  Paad - Użytkownik

Paad
Użytkownik
Skąd: Częstochowa
Zarejestrowany: 2009-02-22

[php] problem ze zwrotem tablicy

Witam

Próbuję sobie napisać skrypt, który będzie mi przeliczał Bajty na MegaBajty i wyżej.
funkcje converter_divisor działa dobrze

Kod:

var_dump($helper);

osiąga takie wartości jakie powinien, ale po zwróceniu tej zmiennej

Kod:

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

Kod:

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

 

#2  2012-09-26 14:56:21

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: [php] problem ze zwrotem tablicy

Taki wynik Ciebie interesuje?

Kod:

start
1.1497809458524 3
array(2) {
  [0]=>
  float(1.1497809458524)
  [1]=>
  int(3)
}
WORTH = 
array(2) {
  [0]=>
  int(1234567890)
  [1]=>
  int(0)
}
stop

LRU #480459

Offline

 

#3  2012-09-26 21:19:37

  Paad - Użytkownik

Paad
Użytkownik
Skąd: Częstochowa
Zarejestrowany: 2009-02-22

Re: [php] problem ze zwrotem tablicy

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

Kod:

return $worth[0].$unit[$worth[1]];

Ostatnio edytowany przez Paad (2012-09-26 21:22:08)

Offline

 

#4  2012-09-27 08:57:50

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: [php] problem ze zwrotem tablicy

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)


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#5  2012-09-27 11:51:00

  TheAnt - Użytkownik

TheAnt
Użytkownik
Skąd: Silesia Moloch
Zarejestrowany: 2012-01-24
Serwis

Re: [php] problem ze zwrotem tablicy

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:

Kod:

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


If I go insane please don't put your wires in my brain...

Offline

 

#6  2012-09-27 12:07:25

  Paad - Użytkownik

Paad
Użytkownik
Skąd: Częstochowa
Zarejestrowany: 2009-02-22

Re: [php] problem ze zwrotem tablicy

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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)