string controleren door middel van array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bob Devlees

bob Devlees

27/06/2009 17:20:00
Quote Anchor link
Hallo,

Ik heb een gegeven string, vb
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$gegeven
= "handdoek/1.0";
?>


Vervolgens heb ik een 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
<?
$materiaal
= array(

  "tas" => array(
    "icon" => "tas",
    "title" => "Tas",
    "rule" => array(
      "tas[/ ]([0-9.]{1,10})" => "\\1"
    )
  ),

  "handdoek" => array(
    "icon" => "handdoek",
    "title" => "Handdoek",
    "rule" => array(
      "handdoek[/ ]([0-9.]{1,10})" => "\\1"
    ),
   ),

  "glas" => array(
    "icon" => "glas",
    "title" => "Glas",
    "rule" => array(
      "glas[/ ]([0-9.]{1,10})" => "\\1"
    ),
   ),
);

?>


Nu zou ik graag willen controleren welke van de verschillende rule-waarden in de string voorkomen, en dan de title opvragen.

Ik heb het zo geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if (!$match = (!isset($materiaal[$gegeven]) ? false : $materiaal[$gegeven])) return "&nbsp;";

$titel = $materiaal['title'];

?>


Ik weet dat het mis is, maar weet niet goed hoe ik het moet oplossen...
 
PHP hulp

PHP hulp

24/11/2024 12:34:30
 
- SanThe -

- SanThe -

27/06/2009 17:36:00
Quote Anchor link
Is zo'n $gegeven altijd in dezelfde syntax?
Dus 'zoekwoord' dan een '/' en dan de rest?
 
Steen

steen

27/06/2009 17:43:00
Quote Anchor link
Doet me denken aan een browsercontrole met versienummer =)

Heb je regex al geprobeerd?
 
Midas

Midas

27/06/2009 18:01:00
Quote Anchor link
steen schreef op 27.06.2009 17:43:
Doet me denken aan een browsercontrole met versienummer =)
Kijk in dat geval eens naar get_browser().
Gewijzigd op 01/01/1970 01:00:00 door Midas
 
Bob Devlees

bob Devlees

27/06/2009 18:09:00
Quote Anchor link
Het is niet voor een browser, dus die get_browser() kan ik niet gebruiken...

@ Santhe

het kan ook zijn dat het zo voorkomt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$gegeven
= "blauwe handdoek/1";
?>



@ steen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
while(list($name,$ereg) = each($materiaal)){
  if (ereg($ereg, $gegeven, $regs)) {
  $titel = $name . " " . $regs[1];

  break;

        }
    }

?>


Maar dat werkt niet, die each is mis zeker? Maar weet niet hoe te vergelijken met die rule...
 
Steen

steen

27/06/2009 18:46:00
Quote Anchor link
Midas komt over het algemeen met oplossingen die niet van toepassing zijn. Je zou wel kunnen kijken naar hoe dat wél gaat bij een browser, omdat delen van die informatie ook zo zijn opgebouwd.

Hoe kom je aan die regels (rule)?
Gewijzigd op 01/01/1970 01:00:00 door steen
 
Bob Devlees

bob Devlees

27/06/2009 19:27:00
Quote Anchor link
hehe :)

Ja die structuur van die rule is niet van mij maar van iemand anders, van het internet geplukt.

Eerst deed ik het gewoon met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
while(list($name,$ereg) = each($_getmateriaal)){
  if (ereg($ereg, $gegeven, $regs)) {
  $titel = $name . " " . $regs[1];

  break;

        }
    }

?>


en
$_getmateriaal['1'] = "tas[/ ]([0-9.]{1,10})";
enz...

Maar het in een array zetten en dan vergelijken lijkt mij handig, aangezien ik dan ook gelijk een titel,icon,... kan meegeven.
Gewijzigd op 01/01/1970 01:00:00 door bob Devlees
 
Jesper Diovo

Jesper Diovo

27/06/2009 20:21:00
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
<?php
$gegeven
= 'handdoek/10';

// hier je hele array

foreach($materiaal as $inhoud) {
  if(preg_match('_'.preg_quote($inhoud['rule'][0], '_').'_', $gegeven)) {
    echo 'Komt overeen met '.$inhoud['title'];
  }
}

?>


Denk dat je dit bedoelt.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Bob Devlees

bob Devlees

27/06/2009 21:25:00
Quote Anchor link
Bedankt,

ik heb het geprobeerd en krijg nu dit als foutmelding:

Undefined offset: 0 in class.php on line 5398

Dat is dus volgende lijn:

if(preg_match('_'.preg_quote($inhoud['rule'][0], '_').'_', $gegeven)) {


Soms staan er overigens meer items onder rule.. dus op deze manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?
$materiaal
=
 "bestek" => array(
    "icon" => "bestek",
    "title" => "Bestek",
    "rule" => array(
      "lepel" => "\\2",
      "vork" => "",
      "mes" => "\\1"
    )
  );

?>
 
Bob Devlees

bob Devlees

28/06/2009 11:30:00
Quote Anchor link
Jezpur nog enig idee wat ik aan die foutmelding kan doen? :)
 



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.