Toon posts:

[php] array key 2 wordt 1 en 3 blijft 3 (poging 2)

Pagina: 1
Acties:

Onderwerpen


  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
Ik ben bezig met een functie waarbij ik op basis van een waarde 2 dimensionale array wil sorteren. Ik heb al het een en ander geprobeerd maar het gaat mis op een punt wat ik niet begrijp.

$arraykey = (1.1-$language_list)*10;
geeft een nette opeenvolgende lijst met keys waarbij de eerste key 1 is.

$arraykey = (1-$language_list)*10;
geeft een lijst met keys waarbij de eerste key 0 is zoals het hoort maar waarbij de value van key 1 de value van key 0 overschrijft. value van key 2 overschrijft key 1 maar de value van key 3 komt netjes in key 3

Ik snap niet hoe dit kan.

de code is
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function testKeys(){
$languages = '0.5,0.4,0.6,0.7,0.8,0.0,0.3,1.0,0.9,0.1,0.2';
$languages = explode( ",", $languages );
$count=0;
foreach ( $languages as $language_list ){
$arraykey = (1.1-$language_list)*10;
//$arraykey = (1-$language_list)*10;
$user_languages[$arraykey] = $count;
$count++;
}
ksort($user_languages);
return $user_languages;
}


output
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
zoals verwacht:(not commented)
Array
(
    [1] => 7
    [2] => 8
    [3] => 4
    [4] => 3
    [5] => 2
    [6] => 0
    [7] => 1
    [8] => 6
    [9] => 10
    [10] => 9
    [11] => 5
)
fout:(commented)
Array
(
    [0] => 8
    [1] => 4
    [3] => 3
    [4] => 2
    [5] => 0
    [6] => 1
    [7] => 6
    [8] => 10
    [9] => 9
    [10] => 5
)

👑


  • ACM
  • Registratie: januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zit je niet gewoon met afronding van floating point getallen te klooien? 1.1 - 0.5 hoeft niet per se precies 0.6 te zijn... en als je dat dan cast naar int (door het te gebruiken als array-key) kan het zijn dat je dan dus met 0.599999*10 uiteindelijk 5 ipv 6 krijgt.

Saai uitzicht in je tuin? Hang er een foto voor!


  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
Dus om dat te controleren moet ik eerst $arrayKey forcen naar een integer en deze controleren.

(1 - 0.8) * 10 != 2 maar 1.999~

👑


  • ACM
  • Registratie: januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat forceren naar integer doe je al :P Ik zou het netjes afronden naar integer. Of wellicht nog beter, in je invoer al met gehele getallen werken, indien mogelijk.

Saai uitzicht in je tuin? Hang er een foto voor!


  • Woy
  • Registratie: april 2000
  • Niet online

Woy

Moderator Devschuur®
ajakkes schreef op dinsdag 26 oktober 2010 @ 14:56:
Dus om dat te controleren moet ik eerst $arrayKey forcen naar een integer en deze controleren.

(1 - 0.8) * 10 != 2 maar 1.999~
Er staat ook het een en ander over floats in onze Faq: Programming FAQ - Getallen en talstelsels

Je zult dus niet zomaar kunnen afkappen ( wat een cast naar int wel doet ), maar zult moeten afronden.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
settype($arraykey,"integer");

Dit laat inderdaad zien dat float 2 integer 1 is.

Bedankt

Edit
code:
1
2
3
4
5
$arraykey = (1-$language_list)*10; 
vervangen door:
$arraykey = $language_list*10;
$arraykey = 10-$language_list;
biedt de oplossing

[Voor 47% gewijzigd door ajakkes op 26-10-2010 16:54]

👑

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee