[PHP] Array functies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Ben tegen iets heel raars aangelopen. Ik heb een array met feestdagen:
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
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
$feestdata = 
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 11
                    [1] => 4
                    [2] => 2004
                )

            [1] => Array
                (
                    [0] => 12
                    [1] => 4
                    [2] => 2004
                )

            [2] => Array
                (
                    [0] => 21
                    [1] => 2
                    [2] => 2004
                )

            [3] => Array
                (
                    [0] => 22
                    [1] => 2
                    [2] => 2004
                )

            [4] => Array
                (
                    [0] => 23
                    [1] => 2
                    [2] => 2004
                )

            [5] => Array
                (
                    [0] => 24
                    [1] => 2
                    [2] => 2004
                )

        )

    [1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 1
            [3] => 1
            [4] => 1
            [5] => 1
        )

)


$feesttype = 
Array
(
    [0] => Array
        (
            [0] => pasen
            [1] => 219415
        )

    [1] => Array
        (
            [0] => carnaval
            [1] => b4e206
        )

)


Nu wil ik kijken of datum 11-04-2004 in de array met data voorkomt:


PHP:
1
2
3
4
5
6
7
//manier 1
if (in_array(array(11,4,2004), $feestdata[0])) {
echo "ja";
}
else {
echo "nee";
}


PHP:
1
2
3
4
5
6
7
//manier 2
if (array_search(array(11,4,2004), $feestdata[0])) {
echo "ja";
}
else {
echo "nee";
}


Manier 1 geeft: ja
Manier 1 geeft: nee

Hoe kan dit?

Pogingen:
reset() voor de if

Oja:
Bij alle dta in de array gaat het goed. Alleen bij de 11-4-2004 werkt de array_search methode niet op de manier waarop ik het zou verwachten.

[ Voor 31% gewijzigd door Verwijderd op 17-03-2004 23:07 ]


Acties:
  • 0 Henk 'm!

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 19-09 11:55
Let op dat array_search() de corresponderende key teruggeeft. "11-04-2004" is het eerste element in de array, dus heeft key 0. De waarde 0 is tevens "false" bij een if-contructie. Je moet dus werken met ===

Zie ook php handleiding:
Deze functie kan FALSE teruggeven, maar kan ook een andere waarde die naar FALSE evalueert teruggeven. Gebruik de === operator om de teruggeven waarde van deze functie te testen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thank you :-)

Heb het nu zo gedaan:
PHP:
1
2
3
4
$plaats = array_search(array(11,4,2004), $feestdata[0]);
if ($plaats !== false) {
    echo "feestdag zit erin";
}

[ Voor 10% gewijzigd door Verwijderd op 17-03-2004 23:48 ]


Acties:
  • 0 Henk 'm!

  • youngster
  • Registratie: Maart 2004
  • Laatst online: 20-05 09:48
Doe het dan nog even zo, ietsje efficienter :) :
PHP:
1
2
3
4
5
<?php
if(array_search(array(11,4,2004), $feestdata[0])){
    echo "feestdag zit erin"; 
}
?>

Real programmers don't comment their code... it was hard to write, it should be hard to read!


Acties:
  • 0 Henk 'm!

Verwijderd

youngster schreef op 18 maart 2004 @ 09:42:
Doe het dan nog even zo, ietsje efficienter :) :
PHP:
1
2
3
4
5
<?php
if(array_search(array(11,4,2004), $feestdata[0])){
    echo "feestdag zit erin"; 
}
?>
Mja, dat werkt dus niet omdat als uit array_search een 0 terugkomt deze geavalueerd wordt als 'false'. Stond ook al een paar posts eerder.

De 'efficiente' manier zal dan zo worden:

PHP:
1
2
3
4
5
<?php
if(array_search(array(11,4,2004), $feestdata[0]) === true){
    echo "feestdag zit erin"; 
}
?>

[ Voor 27% gewijzigd door Verwijderd op 18-03-2004 09:54 ]


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

PHP:
1
2
3
if(array_search(array(11,4,2004), $feestdata[0]) !== false){
    echo "feestdag zit erin";
}


dan? :+

edit:

Juist niet "=== true" toch? array_search geeft de coprresponderende key terug, dus het is niet true, maar een integer. En het zal zeker niet hetzelfde type zijn.

[ Voor 47% gewijzigd door DizzyWeb op 18-03-2004 09:58 . Reden: Toevoeging ]


Acties:
  • 0 Henk 'm!

  • Mx. Alba
  • Registratie: Augustus 2001
  • Laatst online: 20-09 12:02

Mx. Alba

hen/hun/die/diens

Kan je trouwens je array niet beter (duidelijker) zo doen?

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
define('DATUM', 0);
define('TYPE', 1);

define('PASEN', 0);
define('CARNAVAL', 1);

define('FEESTNAAM', 0);
define('KLEUR', 1);

$feestdata = Array(
    Array(
        DATUM => '11-4-2004',
        TYPE => PASEN
    ),
    Array(
        DATUM => '12-4-2004',
        TYPE => PASEN
    ),
    Array(
        DATUM => '21-2-2004',
        TYPE => CARNAVAL
    ),
    Array(
        DATUM => '22-2-2004',
        TYPE => CARNAVAL
    ),
    Array(
        DATUM => '23-2-2004',
        TYPE => CARNAVAL
    ),
    Array(
        DATUM => '24-2-2004',
        TYPE => CARNAVAL
    )
)

$feesttype = Array(
    PASEN => Array(
        NAAM => 'pasen',
        KLEUR => '219415'
        ),
    CARNAVAL => Array(
        NAAM => 'carnaval',
        KLEUR => 'b4e206'
    )
)


En dan je search zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vind($d, $m, $y) {
    $datum = $d.'-'.$m.'-'.$y;
    foreach ($feestdata as $info) {
        if ($info[DATUM] == $datum)
            return($info); // gevonden
    }
    return 0; // niet gevonden
}

printVind($d, $m, $y) {
    if ($info = vind($d, $m, $y)) {
        echo "Gevonden! $d-$m-$y is {$feesttype[$info[TYPE]]}!";
    } else {
        echo "Niet gevonden. $d-$m-$y is geen feestdag ;(";
    }
}


En als je ergens persé de datum in array-formaat nodig hebt, explode je gewoon de datum in string-vorm.

Zo zou ik het doen. Maarja, smaken verschillen, natuurlijk! :)

[ Voor 64% gewijzigd door Mx. Alba op 18-03-2004 10:45 ]

Het is alleen een echte hetze als het uit Hetzerath komt, anders is het gewoon sprankelende ophef.

Pagina: 1