[PHP] volgorde met variabele-namen bepalen

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • W.i.M
  • Registratie: Juni 2007
  • Laatst online: 17:45
Ik zit met een klein probleempje waar ik na denkwerk niet helemaal uitkom en waar de oplossing volgens mij niet zo moeilijk moet zijn.

Ik heb namelijk 5 verschillende variabelenamen met verschillende getallen in een loop.

dus:

$groenhits
$roodhits
$blauwhits
$geelhits
$paarshits

Deze hebben alle 5 steeds verschillende getallen (hits) in de loop, nu wil ik dus bepalen in welke volgorde deze variabele staan oplopend op hits, dus dat ik bijvoorbeeld weet dat $groenhits nummer 5 is omdat hij omdat hij het laagste aantal hits heeft.

Nu heb ik tot aan 3 variabele dit gemakkelijk in een if, then, else statement kunnen zetten maar bij meer worden het toch al aardig wat if, then elsen en zou dit toch op een gemakkelijker manier moeten kunnen alleen weet ik niet welke richting ik het op moet zoeken.

Kan iemand mij een klein handje helpen ?

Acties:
  • 0 Henk 'm!

Verwijderd

array sort ?

Acties:
  • 0 Henk 'm!

  • W.i.M
  • Registratie: Juni 2007
  • Laatst online: 17:45
die variabele zijn geen array, die worden steeds gevuld door een sql query.

Anders zou ik eerst alle waardes in een array moeten zetten wat wel een uiteindelijke oplossing kan zijn als er niets beters is.

Acties:
  • 0 Henk 'm!

Verwijderd

In een array gooien en makkelijk sorteren zou ik ook doen. Eerste wat bij me op komt, en ook het makkelijkste.. Waarom moeilijk gaan nadenken als het antwoord heel makkelijk kan zijn? :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tja, om iets in een volgorde te zetten heb je een bepaalde datastructuur nodig. ;) Ik zie het probleem van een array niet zo. Handig met arrays kunnen spelen is zo'n beetje de belangrijkste PHP feature (en skill). :)

edit:
En je kan natuurlijk ook een ORDER BY in je query plempen. :P

[ Voor 14% gewijzigd door Voutloos op 14-06-2007 19:31 ]

{signature}


Acties:
  • 0 Henk 'm!

  • W.i.M
  • Registratie: Juni 2007
  • Laatst online: 17:45
Als ik nu een arraysort zou gebruiken moet ik heel m'n script ombouwen want hij werkt nu helemaal met 3 variabele waarmee ik een grafiek teken in php, ik moet er alleen 2 variabele bij zetten.

Een ORDER BY lijkt mij niet werken als ORDER by groenhits, blauwhits, enz.... want hij zal dan altijd als eerste de groenhits geven en ik wil per stap weten in welke volgorde ze staan.

Als er niets anders op zit zal ik toch array_sort moeten gebruiken.

[edit]volgens mij kan dit ook niet met array_sort want die geeft ook alleen eerst de hoogste

[ Voor 9% gewijzigd door W.i.M op 14-06-2007 19:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dan lees je de array andersom uit of geef je alle keys namen ( $hits['green'] = value ) of...

Mogelijkheden genoeg...

Huidige variablen vervangen is ook een klein klusje...

Post anders eens wat van je code ?

[edit]
Er zijn vele sort versies voor array in PHP en kunt deze eventueel ook zelf schrijven.

[ Voor 35% gewijzigd door Verwijderd op 14-06-2007 19:51 ]


Acties:
  • 0 Henk 'm!

  • W.i.M
  • Registratie: Juni 2007
  • Laatst online: 17:45
Het is niet het mooiste stukje coding wat ik gemaakt hebt maar dit is een stuk van de coding waarmee ik weet in welke volgorde ze staan en dit staat in een lange loop :

PHP:
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
        if ($groen_hits >= $geel_hits && $groen_hits >= $blauw_hits) {
            if ($geel_hits >= $blauw_hits) {
                $second = 2;
                $third = 3;
            } else {
                $second = 3;
                $third = 2;
            }
            $first = 1;
        } elseif ($geel_hits >= $groen_hits && $geel_hits >= $blauw_hits) {
            if ($groen_hits >= $blauw_hits) {
                $second = 1;
                $third = 3;
            } else {
                $second = 3;
                $third = 1;
            }
            $first = 2;
        } elseif ($blauw_hits >= $groen_hits && $blauw_hits >= $geel_hits) {
            if ($groen_hits >= $geel_hits) {
                $second = 1;
                $third = 2;
            } else {
                $second = 2;
                $third = 1;
            }
            $first = 3;
        }

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Doe jezelf een lol en bouw je script om naar arrays. :>

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Bouw om naar arrays en doe er sorts in, hiermee kan je de volgorde bepalen

php.net/sort

Acties:
  • 0 Henk 'm!

  • W.i.M
  • Registratie: Juni 2007
  • Laatst online: 17:45
met arrays loop ik toch tegen hetzelfde probleem aan ?

ik wil per stap van de loop weten in welke volgorde ze op dat moment staan en met sort zet je alles in volgorde wat ik dus niet wil.

[edit]volgens mij kan het wel door te array-sort per regel te gebruiken

[ Voor 16% gewijzigd door W.i.M op 14-06-2007 20:24 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Je zegt dat je de variabelen gebruikt om een grafiek mee te tekenen? Dan wil je dus per punt op de x-as van je grafiek die volgorde weergeven?
Maak er een multidimensionale array van, $Hits, met daarin alle grafiekpunten, $Hits['01-06-2007'], en zet in die array je waarden, als in:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
// Voor het gemak maak ik een array met alle dagen in deze maand
$Hits = array();
for ($i = 1; $i < date('t'); $i++)
{
  $Hits[$i] = array(
    'red' => 5,
    'green' => 3,
    'blue' => 9
  );
  // En nu sorteren
  array_sort($Hits[$i]);
}

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
In je voorbeeldcode verwijs je naar ze als 1 t/m 5 in plaats van de (kleur)namen, bijvoorbeeld $first = 3; in plaats van $first = 'blauw_hits';. Erg verwarrend, dus dat heb ik maar 'ns razendsnel gedropt. Dan ziet het er met een array bijvoorbeeld zo uit:

PHP:
1
2
3
4
5
6
7
8
9
$volgorde = asort(array(
    'groen_hits' => $groen_hits,
    'rood_hits' => $rood_hits,
    'blauw_hits' => $blauw_hits,
    'geel_hits' => $geel_hits,
    'paars_hits' => $paars_hits));

//evt. inlezen in je losse variabelen:
list($first, $second, $third, $fourth) = array_keys($volgorde);


Dat is ter vervanging van je voorbeeldcode. Het zou als geheel waarschijnlijk nog best handiger kunnen, maar om daar iets over te kunnen zeggen moet je toch echt de code laten zien waar het in hangt (minstens die loop).

@MueR: array_sort() is geen bestaande functie. Je bedoelt asort(). De a onderscheid 'm van sort en staat voor associative, niet voor array.
Pagina: 1