Tabel / vierkantsarray

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul Ulje

Paul Ulje

01/10/2016 15:53:27
Quote Anchor link
Met regelmaat print ik gegevens in een tabelvorm:
Een reeks records die als regels/rijen worden gepresenteerd.
Een tabel dus, niet te verwarren met een MySql table.

Nu vind ik een hoop array functies en array sorteerfuncties.
Maar die mijn tabel kan sorteren op een aangegeven kolom vind ik niet.
Ik kan me niet voorstellen dat die functie niet al bestaat in PHP.
Kent iemand die?

Voorlopig heb ik het als volgt opgelost.
1. voeg voor elk record/array/rij het aangewezen veld vooraan in.
2. sorteer (Gelukkig sorteert sort ook een array van arrays)
3. verwijder het voorste veld weer.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function sortArrayTabel($aIn, $kolNr = 0) {
    foreach ($aIn as $aRegel) {
        $aTmp = array();
        $aTmp[] = $aRegel[$kolNr];
        $aRegel = array_merge($aTmp, $aRegel);
        $aUit[] = $aRegel;
    }
    $aIn = $aUit;
    sort($aIn);
    $aUit = array();
    foreach ($aIn as $aRegel) {
        $tmp = array_shift($aRegel);
        $aUit[] = $aRegel;
    }
    return $aUit;
}


Nogal omslachtig, als zeg ik het zelf...

De aanroep is eenvoudiger

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$aS[] = array('5', '2', '6', '1');
$aS[] = array('3', '4', '1', '2');
$aS[] = array('8', '1', '5', '3');
$kolomNummer=1; // vanaf 0

printArrayTabel($aS);
$aR=sortArrayTabel($aS, $kolomNummer);
printArrayTabel($aR);


De uitvoer ter referentie
5 2 6 1
3 4 1 2
8 1 5 3


8 1 5 3
5 2 6 1
3 4 1 2

De vraag is dus: kan dit niet met één PHP functie?
Gewijzigd op 01/10/2016 16:05:01 door Paul Ulje
 
PHP hulp

PHP hulp

08/05/2021 21:38:17
 
Ramon van Dongen

Ramon van Dongen

01/10/2016 16:46:18
Quote Anchor link
Waarom doe je het sorteren niet direct in je MySQL query?
 
Paul Ulje

Paul Ulje

01/10/2016 16:57:50
Quote Anchor link
Om de noodzaak van een query te vermijden....

Iets meer:
Stel er is een object PEER. Die wordt gewaardeerd door een willekeurig aantal mensen met een cijfer 1..10. Dat staat in de DB.
Daaruit bereken we het gemiddelde, de deviatie, de variatie, aantal.
Dan komt er een tabel:

O G D V A
peer x x x x
etc.

Om nu vlot deze bewerkte gegevens te kunnen bekijken wil ik de tabel gesorteerd op de verschillende kolommen bekijken. Zonder telkens het hele proces opnieuw te doorlopen.
Gewijzigd op 01/10/2016 17:17:04 door Paul Ulje
 
Adoptive Solution

Adoptive Solution

01/10/2016 17:18:41
Quote Anchor link
Is al eens behandeld, vorige week nog.

Hier opnieuw

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php

$aS
[] = array('5', '2', '6', '1');
$aS[] = array('3', '4', '1', '2');
$aS[] = array('8', '1', '5', '3');

echo '<pre>';
print_r($aS);
echo '</pre>';

foreach ($aS as $key => $value) {
    foreach ($value as $k => $v) {
        echo $v . ' ';
    }

    echo '<br />';
}


// Obtain a list of columns
foreach ($aS as $key => $row) {
    $r4[$key] = $row[0];
    $r3[$key] = $row[1];
    $r2[$key] = $row[2];
    $r1[$key] = $row[3];
}


// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key

//array_multisort($r7, SORT_DESC, $r6, SORT_ASC, $multicol);

array_multisort(

    $r4, SORT_DESC,
    $r3, SORT_DESC,
    $r2, SORT_DESC,
    $r1, SORT_DESC,
    $aS
    );

echo '<pre>';
print_r($aS);
echo '</pre>';

foreach ($aS as $key => $value) {
    foreach ($value as $k => $v) {
        echo $v . ' ';
    }

    echo '<br />';
}


?>


Toevoeging op 01/10/2016 17:22:53:

Hier eenzelfde soort vraagstuk :

https://www.phphulp.nl/php/forum/topic/array-sorteren-zoals-in-mysql/100317/

En hier voor de goede orde de uitwerking :

http://adoptive.esy.es/multisort/
 
Paul Ulje

Paul Ulje

01/10/2016 17:32:00
Quote Anchor link
Dank! Als beginner lukt het me niet zo snel deze code te doorgronden. Begrijp ik het goed dat de procedure/functie array_multisort de oplossing biedt? Ik ga het bestuderen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.