login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Kijken of waarde voorkomt met in_array

Offline Ijspegel - 18/03/2009 17:40 (laatste wijziging 18/03/2009 17:43)
Avatar van IjspegelNieuw lid Ik haal uit mijn database allemaal hotels, campings, appartementen, etc. Bij sommige van deze staat hierin niet Hotel, camping of appartement. Dan staat er dus bijvoorbeeld NH Amsterdam. Nu wil ik dat er hierbij nog het accommodatie type bij geplaatst wordt zodat het Hotel NH Amsterdam wordt.

Ik dacht het controleren of een waarde voorkomt in een array als volgt werkt:
  1. <?php
  2. $aAccommodatietypeNaam = array('hotel','motel','appartement', 'bungalow', 'vakantiehuis', 'hostel', 'aparthotel', 'villa', 'camping', 'herberg', 'chalet', 'vakantiepark', 'bed&breakfast', 'b&b');
  3.  
  4. $query = "SELECT naam FROM accommodaties";
  5. $result= mysql_query($query) or die (mysql_error());
  6. while ($row = mysql_fetch_assoc($result))
  7. {
  8. if (in_array($row['naam'], $aAccommodatietypeNaam))
  9. {
  10. echo $row['naam']. ' komt voor in de array.';
  11. }
  12. else
  13. {
  14. echo $row['naam']. ' komt niet voor in de array.';
  15. }
  16. }
  17. ?>

Dit werkt echter niet, want ik krijg steeds de 'else' melding. Ik vermoed dat dit komt doordat bijvoorbeeld een waarde uit de DB zoals "Hotel Zeezicht" ook false geeft omdat deze niet precies overeenkomt met de waarde "hotel". Ik heb daarom toen geprobeerd de hotelnamen uit de DB proberen op te splitsen door een explode te doen op de spatie, maar daar krijg ik het ook niet werkend mee. 

Heeft iemand van jullie misschien een idee hoe ik dit goed werkend kan krijgen? Het gaat er dus om hoe ik kan kijken of een woord uit een hotelnaam (of campingnaam, appartementnaam, etc) voorkomt in $aAccommodatietypeNaam.

6 antwoorden

Gesponsorde links
Offline kickasgamer - 18/03/2009 17:55
Avatar van kickasgamer PHP ver gevorderde en echo $row['naam'] eens miss dat die waarde fout zit
Offline Ijspegel - 18/03/2009 18:00 (laatste wijziging 18/03/2009 18:01)
Avatar van Ijspegel Nieuw lid De waarde is dan Village Hotel. Ik wil dan dus dat er het bericht komt dat deze voorkomt in de array, maar krijg helaas dat hij aangeeft dat het er niet in voorkomt. 

Maar is dat niet logisch omdat Village Hotel niet gelijk is aan 1 van de waardes uit de array $aAccommodatietypeNaam? Dat dacht ik tenminste waardoor ik daarna heb geprobeerd om de accommodatienamen te exploden op de spatie waardoor je dus het woord Hotel ook los in de array krijgt. Maar dat werkte dus helaas ook niet, maar het kan natuurlijk dat ik dat toen fout heb gedaan.

Zou je misschien kunnen zeggen hoe jij het zou doen?
Offline kickasgamer - 18/03/2009 18:07 (laatste wijziging 18/03/2009 18:09)
Avatar van kickasgamer PHP ver gevorderde ja tis normaal dat je geen resultaat krijgt want "Village Hotel" is niet gelijk aan iets wat in de array staat (er staat wel hotel maar in_array controleerd exact)

EDIT: je kan wel de naam die je uit de DB haalt exploden op spatie en dan in een for loop laten checken met in_array() dan zou het wel werken als je "Village Hotel" hebt dat hij ziet dat hotel overeen komt
Offline Ijspegel - 18/03/2009 18:23 (laatste wijziging 18/03/2009 19:07)
Avatar van Ijspegel Nieuw lid Hmm oke, ik had dit geprobeerd:
$test = explode(' ', $row['naam']);
if (!in_array($test, $aAccommodatietypeNaam))

Ik had gelezen dat je ook bij in_array aan beide kanten arrays kan gebruiken, dus ik dacht dat dat zou kunnen. Maar dat kan dus niet als ik jou goed begrijp?

Zou je misschien in mijn voorbeeld dat met die for lussen willen verwerken? Heb ook al aan zoiets gedacht, maar weet niet zo snel hoe ik dat moet doen.

Ik hoop dat je nog even wilt helpen.  
Offline Jas_per_post - 18/03/2009 20:41
Avatar van Jas_per_post JS interesse Ik las idd ook dat het eerste argument een array mocht zijn, maar ik interpreteerde het als:
Als je het eerste argument een array is en het tweede een array van arrays kun je ook een positief resultaat krijgen.

Waar je ook op moet letten is dat in_array hoofdlettergevoelig is.

De makkelijkste oplossing lijkt me om hier een regex voor te schrijven, maar regexes zijn weer een heel vak op zich.
Offline ArieMedia - 19/03/2009 09:21 (laatste wijziging 19/03/2009 09:27)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Je kan dit ook in je query afvangen ;)
  1. SELECT naam FROM accommodaties
  2. WHERE naam LIKE 'motel%'
  3. OR naam LIKE 'hotel%'
  4. OR naam LIKE 'appartement%'


Scheelt je een keer controleren, dit is dus een sneller alternatief  
Nu vang je alles af waar motel en hotel ect. voorstaat.

Je kan ook gewoon je huidige SQL houden en dan controleren

  1. $sql = 'SELECT naam FROM accommodaties';
  2. $res = mysql_query($sql);
  3. while($rij = mysql_fetch_assoc($res)) {
  4. $exp = explode(' ', $row['naam']) // explode maakt een array
  5. if(count($exp) < 2) { $naam = 'Hotel '.$rij['naam']; } // je telt de elementen in de array is deze kleiner dan 2 ga dan verder
  6. else $naam = $rij['naam'];


Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.227s