3 dim array sorting

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter Tinbergen

wouter Tinbergen

04/06/2010 17:00:07
Quote Anchor link
Hallo
Ik ben een newbe.

Ik heb een array die ik wil sorteren op [date] en ik kom er niet uit. Iemand een suggestie waar ik moet beginnen?
ik kom niet op de goede diepte in de array.

Array
(
[0] => Array
(
[0] => Array
(
[title] => titiltje
[date] => 5-6-2010
)
[1] => Array
(
[title] => titiltje2
[date] => 2-6-2010
)
)
[1] => Array
(
[0] => Array
(
[title] => titiltje 5
[date] => 3-6-2010
)
[1] => Array
(
[title] => titiltje2
[date] => 2-6-2010
)
)
)

Als iemand tips heeft waar te starten, graag!
Wouter
 
PHP hulp

PHP hulp

21/12/2024 19:06:17
 
K i p

K i p

04/06/2010 17:06:25
Quote Anchor link
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
<?php
    $a
= array (
        array (
            array (
                'title' => 'hoi' ,
                'date' => '5-6-2010'
            ) ,
            array (
                'title' => 'hoi' ,
                'date' => '5-6-2010'
            )
        ) ,

        array (
            array (
                'title' => 'hoi' ,
                'date' => '5-6-2010'
            ) ,
            array (
                'title' => 'hoi' ,
                'date' => '5-6-2010'
            )
        )
    );
    
    function
sorteer ( $a )
    {

        $a = sort ( $a );
        foreach ( $a as $a2 )
        {

            if ( is_array ( $a2 ) )
            {

                sorteer ( $a );
            }
        }
    }

    
    $a = sorteer ( $a );
    
    echo '<pre>' , print_r ( $a , true ) , '</pre>';
?>
Zoiets kan je gebruiken om het recursief te doen.
 
Wouter Tinbergen

wouter Tinbergen

04/06/2010 18:24:39
Quote Anchor link
ah, dank! ik ga straks of igg het weekend effe prutsen! Dank!
 
Noppes Homeland

Noppes Homeland

05/06/2010 14:07:01
Quote Anchor link
http://nl2.php.net/manual/en/function.array-multisort.php

Lijkt mij een betere oplossing dan z'n zelf geschreven recursieve functie.
 
- SanThe -

- SanThe -

05/06/2010 14:53:31
Quote Anchor link
Dat wordt niks.

Als je dit sorteert:
'date' => '15-6-2010'
'date' => '5-6-2010'
'date' => '2-2-2000'

Krijg je dit:
'date' => '15-6-2010'
'date' => '2-2-2000'
'date' => '5-6-2010'

Maak er eerst eens een 'echte' datum van.
Dus YYYY-MM-DD format.
 

05/06/2010 20:37:29
Quote Anchor link
Sowieso is dit een rare array:
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
51
52
53
54
55
56
57
58
59
<?php
$blaat
= array(
             array(
                  array( 'title' => 'titiltje',
                           'date' => '5-6-2010'
                        ),
                  array( 'title' => 'titiltje2',
                          'date' => '2-6-2010'
                          )
                   ),

             array(
                   array( 'title' => 'titiltje 5',
                           'date' => '3-6-2010'
                         ),
                   array( 'title' => 'titiltje2',
                           'date' => '2-6-2010'
                       )
                   )
              );

var_dump($blaat);
/* Levert:
array(2) {
  [0]=>
  array(2) {
    [0]=>
    array(2) {
      ["title"]=>
      string(8) "titiltje"
      ["date"]=>
      string(8) "5-6-2010"
    }
    [1]=>
    array(2) {
      ["title"]=>
      string(9) "titiltje2"
      ["date"]=>
      string(8) "2-6-2010"
    }
  }
  [1]=>
  array(2) {
    [0]=>
    array(2) {
      ["title"]=>
      string(10) "titiltje 5"
      ["date"]=>
      string(8) "3-6-2010"
    }
    [1]=>
    array(2) {
      ["title"]=>
      string(9) "titiltje2"
      ["date"]=>
      string(8) "2-6-2010"
    }
  }
}
*/

?>

Hoe moet het dan gesorteerd worden? Dat kan op verschillende manieren:
titiltje2
titiltje 5
titiltje2
titiltje

titiltje2
titiltje2
titiltje 5
titiltje

titiltje2
titiltje 5
titiltje
De ene bewaard dus wel de structuur van de 'omliggende' array, de andere niet, en de derde haalt ook eens het duplicaat weg. Wat wil je nu? Misschien is het ook eerst handig om een handigere array te maken. Waar komt dit überhaupt uit?

(@SanThe: Met natsort gaat het wel goed:
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
<?php
$a
= array ('15-6-2010', '3-6-2010', '5-6-2010', '2-6-2010', '2-2-2000', '2-6-2010');
$b = $a;
natsort($a);
var_dump($a, $b);
/* Levert:
array(6) {
  [4]=>
  string(8) "2-2-2000"
  [5]=>
  string(8) "2-6-2010"
  [3]=>
  string(8) "2-6-2010"
  [1]=>
  string(8) "3-6-2010"
  [2]=>
  string(8) "5-6-2010"
  [0]=>
  string(9) "15-6-2010"
}
array(6) {
  [0]=>
  string(9) "15-6-2010"
  [1]=>
  string(8) "3-6-2010"
  [2]=>
  string(8) "5-6-2010"
  [3]=>
  string(8) "2-6-2010"
  [4]=>
  string(8) "2-2-2000"
  [5]=>
  string(8) "2-6-2010"
}
*/

?>
 
- SanThe -

- SanThe -

05/06/2010 21:33:12
Quote Anchor link
@Karl:

Maar deze niet:
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
<?php
$a
= array ('15-6-2010', '3-6-2010', '5-6-2010', '2-6-2010', '2-2-2000', '3-6-2005');
$b = $a;
natsort($a);
echo '<pre>';
var_dump($a, $b);
echo '</pre>';

/* Output
array(6) {
  [4]=>
  string(8) "2-2-2000"
  [3]=>
  string(8) "2-6-2010"
  [5]=>
  string(8) "3-6-2005"
  [1]=>
  string(8) "3-6-2010"
  [2]=>
  string(8) "5-6-2010"
  [0]=>
  string(9) "15-6-2010"
}
array(6) {
  [0]=>
  string(9) "15-6-2010"
  [1]=>
  string(8) "3-6-2010"
  [2]=>
  string(8) "5-6-2010"
  [3]=>
  string(8) "2-6-2010"
  [4]=>
  string(8) "2-2-2000"
  [5]=>
  string(8) "3-6-2005"
}
*/

?>
 

05/06/2010 21:37:41
Quote Anchor link
Ah, shoot. Jammer.
Maar inderdaad, sowieso slimmer om met het juiste formaat te werken.
 
Wouter Tinbergen

wouter Tinbergen

06/06/2010 11:46:00
Quote Anchor link
Dank voor jullie reacties. Heb pas woensdag tijd. Probleem (voor mij) van geneste arrays komt door Array-push. Ik zal kijken of ik dat kan wijzigen.

bron is een loop van verschillende RSS feeds die moeten worden samengevoegd en dan op datum gesorteerd.

ik ga ermee aan het werk! Dank
 

06/06/2010 12:42:47
Quote Anchor link
Wwwouter Tinbergen op 06/06/2010 11:46:00:
Dank voor jullie reacties. Heb pas woensdag tijd. Probleem (voor mij) van geneste arrays komt door Array-push. Ik zal kijken of ik dat kan wijzigen.

bron is een loop van verschillende RSS feeds die moeten worden samengevoegd en dan op datum gesorteerd.

ik ga ermee aan het werk! Dank


Ik had al zo'n vermoeden dat het dus van meerdere plekken samengevoegd werdt. Volgens mij moet je het dan in principe ook zo kunnen maken dat de buitenste twee arrays vervallen, want nu hebben ze geen toegevoegde waarde (in jou voorbeeld).
Gewijzigd op 06/06/2010 12:44:10 door
 
Wouter Tinbergen

wouter Tinbergen

09/06/2010 12:03:50
Quote Anchor link
Ter info : alles zit nu netjes in 1 array met een array_merge. Ga nu de datum omschrijven en dan sorteren op datum.
 



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.