PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : verschachteltes array und lange werte



LinuxNewbee
20-03-2008, 16:57
Hallo

ich hab eine verschachteltes Array

Array
(
[0] => Array
(
[title] => ferrari
[pop] => 4.14386848356E-06
)

[1] => Array
(
[title] => asus
[pop] => 9.11651066383E-07
)

[2] => Array
(
[title] => rapid go
[pop] => 0.000398644608332
)
)

Nach meinem Zahlenverständnis nach pop absteigend geordnet
rabid - ferrari - asus

er gibt aber
asus - ferrari - rapid aus.

und ich hab mit nicht mit auf oder absteigend vertan.

ich gehe davon aus, dass das mit der *10^ struktur zu tun hat, also den variabletypen zu tun hat.
Erst Rechnung, dann speicherung in Array.
Was nimmt php denn? Ich weiß es nicht mehr. Is die ausgabe 9.11651066383E-07 ein Hinweis auf zu lang für Integer: Long muss her?

LinuxNewbee
20-03-2008, 17:07
also ein

( $array[1][pop]>$array[2][pop] )


gibt true zurück

Also ist 9.11651066383E-07 größer als 0.000398644608332 ?!?!?

Das muss doch an dem Typ liegen. Aber spring PHP nicht je nach bedarf in den passenden Typ? Hach...

BLUESCREEN3D
20-03-2008, 18:57
Probier mal, das Array mit var_dump() auszugeben, dann siehst du die Datentypen.

Und benutz bitte das [code]-Tag.

LinuxNewbee
20-03-2008, 19:57
Also ist es Float. Also müsste der doch mit dezimalzahlen von 10^-7 klar kommen oder?



array(4) {
[0]=>
array(17) {
[0]=>
string(2) "12"
["id"]=>
string(2) "12"
[1]=>
string(2) "15"
["cid"]=>
string(2) "15"
[2]=>
string(8) "Rapid Go"
["title"]=>
string(8) "Rapid Go"
[3]=>
string(1) "4"
["clicked"]=>
string(1) "4"
[4]=>
string(10) "1206021109"
["creationtime"]=>
string(10) "1206021109"
[5]=>
string(1) "0"
["responded"]=>
string(1) "0"
[6]=>
string(0) ""
["picture"]=>
string(0) ""
[7]=>
string(0) ""
["col_3"]=>
string(0) ""
["pop"]=>
float(0.000180456555084)
}
[1]=>
array(17) {
[0]=>
string(1) "5"
["id"]=>
string(1) "5"
[1]=>
string(1) "1"
["cid"]=>
string(1) "1"
[2]=>
string(11) "Ferrari 308"
["title"]=>
string(11) "Ferrari 308"
[3]=>
string(1) "5"
["clicked"]=>
string(1) "5"
[4]=>
string(10) "1204824541"
["creationtime"]=>
string(10) "1204824541"
[5]=>
string(1) "0"
["responded"]=>
string(1) "0"
[6]=>
string(3) "jpg"
["picture"]=>
string(3) "jpg"
[7]=>
string(6) "$54000"
["col_3"]=>
string(6) "$54000"
["pop"]=>
float(4.10261796257E-6)
}
[2]=>
array(17) {
[0]=>
string(1) "4"
["id"]=>
string(1) "4"
[1]=>
string(1) "1"
["cid"]=>
string(1) "1"
[2]=>
string(7) "Audi TT"
["title"]=>
string(7) "Audi TT"
[3]=>
string(1) "1"
["clicked"]=>
string(1) "1"
[4]=>
string(10) "1204824541"
["creationtime"]=>
string(10) "1204824541"
[5]=>
string(1) "0"
["responded"]=>
string(1) "0"
[6]=>
string(3) "png"
["picture"]=>
string(3) "png"
[7]=>
string(5) "$6000"
["col_3"]=>
string(5) "$6000"
["pop"]=>
float(8.20523592515E-7)
}
[3]=>
array(17) {
[0]=>
string(1) "6"
["id"]=>
string(1) "6"
[1]=>
string(1) "2"
["cid"]=>
string(1) "2"
[2]=>
string(16) "Asus motherboard"
["title"]=>
string(16) "Asus motherboard"
[3]=>
string(1) "1"
["clicked"]=>
string(1) "1"
[4]=>
string(10) "1204824541"
["creationtime"]=>
string(10) "1204824541"
[5]=>
string(1) "1"
["responded"]=>
string(1) "1"
[6]=>
string(0) ""
["picture"]=>
string(0) ""
[7]=>
string(0) ""
["col_3"]=>
string(0) ""
["pop"]=>
float(9.02575951766E-7)
}
}


Liegt das Problem vielleicht schon in meiner rechnung?


$popularity = ($row["clicked"]/(time()-$row["creationtime"]))*(0.1*$row["responded"]+1);


Die Formel ist sauber, aber vielleicht sind $row[clicked] etc. schon Strings.
Aber warum der dann überhaupt anfängt zu rechnen? Nach dem Motto besser ne flasche Lösung als gar keine. Egal. kann man nicht mit int() oder so den string vorher umwandeln? ich probiers mal aus...

LinuxNewbee
20-03-2008, 20:56
Nutzt au nix.

Ist das denn normal?

Sagen wir ich hab ne float-variable und in der steht

0.000000911651066383

und ich geb die mit nem echo aus krieg ich aum Bildschirm

9.11651066383E-07

angezeigt?

oder steht wirklich 9.11651066383E-07 in der variable. dann is ja klar dass der die als string behandelt, wegen dem E.

mehlvogel
21-03-2008, 07:09
Das E gibt nur den 10er Exponent an. Also 9.11E-7 = 9.11 * 10^-7 = 0.000000911. Das ist einfach die wissenschaftliche Schreibweise. Das wird deswegen intern nicht in einen String verwandelt (auch wenn man das PHP sicherlich zutrauen könnte ;)).

BLUESCREEN3D
21-03-2008, 15:29
also ein

( $array[1][pop]>$array[2][pop] )
gibt true zurück

Also ist 9.11651066383E-07 größer als 0.000398644608332 ?!?!?
Bist du dir da sicher?

<?php

$a = 9.11651066383E-07;
$b = 0.000398644608332;

echo (int)($a > $b);

?>
Das gibt bei mir 0 aus, also false.


Liegt das Problem vielleicht schon in meiner rechnung?
Wenn das Ergebnis der Rechnung in "pop" steht, dann siehst du ja, ob die Ergebnisse der Rechnung den Anforderungen entsprechen.


Die Formel ist sauber, aber vielleicht sind $row[clicked] etc. schon Strings.
Aber warum der dann überhaupt anfängt zu rechnen? Nach dem Motto besser ne flasche Lösung als gar keine.
Selbst wenn du mit Strings, in denen Zahlen stehen, rechnest, wandelt PHP das für die Rechnung um.

undefined
21-03-2008, 19:03
Gehe mal hin und caste, PHP hat die Angewohnheit alles innerhalb von Array's nach long zu Konvertieren. Zum Thema Datengröße brauchst du keine Angst zu haben, PHP verwendet in wirklich kein int, wenn du mal eine Extension schreibst wirst du schnell erkennen was hier alles mit long(Z_LVAL) verbraten wird.
Die Angaben findest du in der php/Zend/zend.h oder php/main/php.h

LinuxNewbee
28-03-2008, 08:30
Aaaach das läuft, natürlich läuft das, wasn sonst? Wenn man auch nach dem falschen Register sortiert. WAS WÜRD ICH NUR OHNE DIESE DUMMHEITEN TUN. Fühlte mich ja gar nicht wie ich selbst!

LiNuB