[php] array vergelijken, daarna uitvoer

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 21:11
Na wat op got en php.net te hebben rond gezocht kom ik nog niet echt uit het volgende probleem:

Is het mogenlijk om een vaste waarden te vergelijken met waarden uit een array.
Als dit is gebeurt en ze zijn allemaal niet gelijk aan die ene waarde dan mag er pas wat worden uitgevoerd.

heb wel al gevonden dat de array wordt vergeleken met de vaste waarden.
PHP:
1
2
3
4
5
6
7
8
9
<? 
for ($i=0;$i <count($item);$i++) 
{ 
    if ($variabele == $item[$i]) 
    { 
          // uitvoer
   } 
} 
?>

maar deze voert steerd die uitvoer tussendoor uit niet de bedoeling dus.

[ Voor 3% gewijzigd door InfoTracer op 02-05-2005 02:52 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
$arr = array('test', 'blaat', 'foo', 'bar');
$zoek = 'test';
if (!in_array($zoek, $arr)) {
  //doe iets
}

;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 21:11
thanx kreeg het ook net al door op irc van Catch22 (nog bedankt) blijven rare mensen hier ;) , zolaat nog vragen beantwoorden :D

Acties:
  • 0 Henk 'm!

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

MueR

Admin Tweakers Discord

is niet lief

offtopic:
Zo laat nog vragen stellen is minder raar dan?

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


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Meivakantie / slapeloosheid / slechte film. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Sorry voor de kick, maar ik zit met een zelfde soort probleem als de TS.

Echter, ik wil waardes uit een array (die gevult word door MySQL) vergelijken met een andere array (die ook gevult word vanuit MySQL, maar dan een andere query...)
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
<?php
$kamerarray = array("313", "414", "515", "616");
/*
   Normaal word dit gevult door MySQL dus, gaat op GoT wat lastig ;)
   Bovenstaande array, is een array, met ALLE bestaande kamers
*/

$checkarray = array("414", "515", "616"); 
/*
   Deze komt ook uit MySQL, met een maar...
   Want dit zijn de kamers die op een datum, een tijd gereserveerd zijn...
*/

foreach ($kamerarray as $kvalue => $kkey)
{
    foreach($kvalue as $i) // Regel 90*
    {
        while($checkwaarde != $i)
        {
            echo "Ongelijk!";
        }
        $i++;
    }
}
?>
Dit doorloopt de array netjes 4x (Aangezien de kamerarray 4 kamers heeft).
Echter krijg ik een warning, en snap ik even niet waarom... Ik doe dus wat fout, maar om er weer een halve dag op blind te staren zit ik niet op te wachten... Zoals tevens ook te zien is, wil ik niet de key's met elkaar vergelijken, maar de waardes uit elke array...
Warning: Invalid argument supplied for foreach() in bestand on line 90*
is de foutmelding die ik krijg...

Of is het zo, dat ik de waarde van $kkey kan vergelijken met de waarde van $ckey? Zo ja, hoe doe ik dit dan? Heb net
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach ($kamerarray as $kvalue => $kkey)
{
    foreach($checkarray as $cvalue => $ckey)
    {
        while($cvalue != $kvalue)
        {
            echo "Ongelijk!";
        }
        $i++;
    }
}
?>
geprobeert, maar dit geeft ook een warning, en doorloopt de loop maar 1x, dus ik was er net 'dichterbij' dan net... Maar kom net dat ene beetje te kort... 8)7

Poging 3:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
foreach ($kamerarray as $kvalue => $kkey)
{
    foreach($checkarray as $cvalue => $ckey)
    {
        if($cvalue != $kvalue)
        {
            echo "Je bent hartstikke ongelijk!!";
        }
    }
} 
?>
Dit maar geprobeert, en dit geeft ook een warning, waarom weet ik nog steeds niet, weet wel, dat het schijnbaar aan de eerste foreach loop ligt, maar wat is er daar fout aan dan als ik vragen mag?

Thnx in advance! Ik weet dat het niet hoeft, maar het is wel zo 'netjes' natuurlijk ;)

EDIT:
Mocht de vraag komen waarom gebruik je er geen MySQL query voor? :? Ik heb het geprobeert, maar krijg het nog niet echt aan de gang, mede doordat ik gebonden zit aan de PEAR::DB class, en een oude MySQL-versie (3.25.xx)(:X). Had wel een query, maar die geeft dan op het moment dat er op een datum geen 'vrije' kamers meer weer, terwijl er op een tijdstip een kamer best vrij kan zijn... ;)

SQL:
1
2
3
SELECT kamers.kamer_nummer from `kamers`
LEFT JOIN `reserveringen` on kamers.kamer_nummer=reserveringen.int_kamer_nummer
WHERE reserveringen.int_kamer_nummer is null;
Dit is die query, die lege kamers geeft, maar kan er door de left join geen extra where clause aan hangen, op de datum en een begin- en eindtijd en dus verdwijnen op den duur (eigenlijk heel snel) de rooms uit de lijst van beschikbare kamers op een datum, een begin
tijd en een eindtijd

EDIT2: Over het eerder door NME gepostte in_array gaat bij mij dus niet, want ik zoek niet een vaste waarde in en array... Alhoewel ik wel zou kunnen itereren, door kamerarray te laten itereren over checkarray... Maar hoe moet ik dan de code daarvoor maken? :?

* CH4OS weet het ff niet meer 8)7

[ Voor 59% gewijzigd door CH4OS op 11-05-2005 10:43 ]


Acties:
  • 0 Henk 'm!

Verwijderd

GJ-tje schreef op woensdag 11 mei 2005 @ 10:21:
Sorry voor de kick, maar ik zit met een zelfde soort probleem als de TS.
Echter, ik wil waardes uit een array (die gevult word door MySQL) vergelijken met een andere array (die ook gevult word vanuit MySQL, maar dan een andere query...)

[...]
Je kunt dat bijvoorbeeld zo oplossen;
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
<?php

    // waarden, init
    $kamers     = array(313, 414, 515, 616);
    $checknummers   = array(313, 515, 616);
    
    $resultaat  = array();  // gebruiken om kamernummers in op te slaan
                    // die niet in de array `$kamers` zitten

    // controle loopje
    foreach($kamers AS $key => $kamernummer)
    {

        if(!in_array($kamernummer, $checknummers))
        {
            
            $resultaat[] = $kamernummer;

        }

    }

    // resultaat
    print_r($resultaat);

?>


...ik denk echter dat er wel een mooie array-functie voor bestaat, maar dat zul je zelf even moeten bekijken in de ferme manual van php.net.

En inderdaad, array_diff() is je vriend.
En ik ben gek dat ik dat opgezocht heb :Y)

Nb. Kijk eens even goed naar de wijze waarop je de index (key) en de waarde uit een array probeert te halen.

[ Voor 13% gewijzigd door Verwijderd op 11-05-2005 10:53 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op woensdag 11 mei 2005 @ 10:44:
Je kunt dat bijvoorbeeld zo oplossen;
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
<?php

    // waarden, init
    $kamers     = array(313, 414, 515, 616);
    $checknummers   = array(313, 515, 616);
    
    $resultaat  = array();  // gebruiken om kamernummers in op te slaan
                    // die niet in de array `$kamers` zitten

    // controle loopje
    foreach($kamers AS $key => $kamernummer)
    {

        if(!in_array($kamernummer, $checknummers))
        {
            
            $resultaat[] = $kamernummer;

        }

    }

    // resultaat
    print_r($resultaat);

?>


...ik denk echter dat er wel een mooie array-functie voor bestaat, maar dat zul je zelf even moeten bekijken in de ferme manual van php.net.

Nb. Kijk eens even goed naar de wijze waarop je de index (key) en de waarde uit een array probeert te halen.
Thnx voor je hulp, ga dat nu even proberen... :) De wijze waarop ik de key en de waarde uit een array haal... Enige wat mij opvalt, is dat ik de waarde en key andersom heb, maakt dat zo'n grandioos verschil dan? :?

Over de manual... Die had ik al helemaal uitgepluist (sorry dat ik dat niet erbij verteld had... in_array() en array_search() kwamen toen naar boven, maar zat meet met de gedachte hoe ik kamer uit array 1 kan laten itereren over array 2 ;)

[ Voor 11% gewijzigd door CH4OS op 11-05-2005 10:53 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
GJ-tje schreef op woensdag 11 mei 2005 @ 10:52:
Over de manual... Die had ik al helemaal uitgepluist (sorry dat ik dat niet erbij verteld had... in_array() en array_search() kwamen toen naar boven, maar zat meet met de gedachte hoe ik kamer uit array 1 kan laten itereren over array 2 ;)
array_intersect() niet gevonden?
Als je het verschil tussen arrays wil hebben heb je nog array_diff()...

[ Voor 14% gewijzigd door T-MOB op 11-05-2005 10:57 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

GJ-tje schreef op woensdag 11 mei 2005 @ 10:52:
[...]
Thnx voor je hulp, ga dat nu even proberen... :) De wijze waarop ik de key en de waarde uit een array haal... Enige wat mij opvalt, is dat ik de waarde en key andersom heb, maakt dat zo'n grandioos verschil dan? :?
Ja.
Over de manual... Die had ik al helemaal uitgepluist (sorry dat ik dat niet erbij verteld had... in_array() en array_search() kwamen toen naar boven, maar zat meet met de gedachte hoe ik kamer uit array 1 kan laten itereren over array 2 ;)
Zie mijn edit, array_diff() is een functie die dit doet. Er zijn nog een aantal functies die vergelijkbare vergelijkingen (smooth woordgebruik..) uitvoeren, met- of bijvoorbeeld zonder key-vergelijking, met een user-functie, etc.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Mag ik vragen, waarom het zo'n groot verschil maakt dan? Jij maakt hem zeg maar van links naar rechts... En ik van rechts naar links... Toch? :?
Zie mijn edit, array_diff() is een functie die dit doet. Er zijn nog een aantal functies die vergelijkbare vergelijkingen (smooth woordgebruik..) uitvoeren, met- of bijvoorbeeld zonder key-vergelijking, met een user-functie, etc.
T-MOB schreef op woensdag 11 mei 2005 @ 10:55:
array_intersect() niet gevonden?
Als je het verschil tussen arrays wil hebben heb je nog array_diff()...
array_diff() is inderdaad wat ik zoek!! Weet niet waarom ik die heb gemist gisteren met zoeken... Denk dat ik hem niet zag staan of zo... 8)7 Thnx voor jullie hulp in ieder geval!! _/-\o_

[ Voor 3% gewijzigd door CH4OS op 11-05-2005 11:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

GJ-tje schreef op woensdag 11 mei 2005 @ 11:02:
Mag ik vragen, waarom het zo'n groot verschil maakt dan? Jij maakt hem zeg maar van links naar rechts... En ik van rechts naar links... Toch? :?
Ik zou eens goed gaan kijken naar wat foreach() precies doet. Je maakt een grote (en belangrijke als je vaker met PHP en foreach() gaat werken!) gedachten/gebruikers-fout namelijk.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

GJ-tje schreef op woensdag 11 mei 2005 @ 11:02:
Mag ik vragen, waarom het zo'n groot verschil maakt dan? Jij maakt hem zeg maar van links naar rechts... En ik van rechts naar links... Toch? :?
En hoe denk jij dat PHP gaat zien welke van de twee een key is, en welke een value? PHP zegt gewoon: eerste is key, tweede is value. Wat jij er vervolgens mee doet is jouw zaak, maar als je niet van die volgorde uitgaat, dan gaat alles mis.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op woensdag 11 mei 2005 @ 14:34:
[...]

En hoe denk jij dat PHP gaat zien welke van de twee een key is, en welke een value? PHP zegt gewoon: eerste is key, tweede is value. Wat jij er vervolgens mee doet is jouw zaak, maar als je niet van die volgorde uitgaat, dan gaat alles mis.
offtopic:
Those could be my own words...
Pagina: 1