* als replacement symbool?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

10/01/2014 23:20:08
Quote Anchor link
Ola,

Ik vraag me af of een * wel eens gebruikt wordt als een replacement symbool in een tekst. Dus bijv.
"Hallo *, welkom op onze site.". Of zijn er andere/beter symbolen die je hiervoor kunt gebruiken?
 
PHP hulp

PHP hulp

22/12/2024 06:52:28
 
Ivo P

Ivo P

10/01/2014 23:58:59
Quote Anchor link
als een soort template?

En als je nu 2 of 3 of 40 plaatsen iets wilt neerzetten?

Als je het op die manier wilt doen, dan zou ik iets als #NAAM# gebruiken, en verderop in de tekst bijvoorbeeld #DATUM# etc etc
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:02:37
Quote Anchor link
In dit voorbeeld moet ik toevallig maar 1 ding vervangen dus dan zijn er geen meerdere plaatsen. Jij gebruikt nu een #, maar is dit bijvoorbeeld ook gebruikelijk: *NAAM* en *DATUM* ?

Of worden in dit soort situaties altijd hekjes gebruikt?
 
Wouter J

Wouter J

11/01/2014 00:12:17
Quote Anchor link
Volledig wat jij wilt.

In een templating language gebruik je bijv. {{ naam }}. Maar voor strings zou ik vaak gewoon de (s)printf methode aanhouden en %s gebruiken (eventueel met plaatscijfers). Of ik zou de Symfony parameter formaat gebruiken en %naam% gebruiken. Maar bijv. in Faker gebruik je ? voor letters en # voor cijfers. Met de CmfBlockBundle gebruik je weer |%block:name%|
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:16:54
Quote Anchor link
Ah oké...

Ik heb nu een class, en bij een aantal methods gebruik ik een functie die een exception teruggeeft waarvan in de tekst het path moet worden vervangen door de meegegeven file of directory (zo... dat klinkt nog eens lekker onduidelijk :-) ) Maar dat kan ik niet (handig) met sprintf oplossen, dus dan gebruik ik even een string replace. Maar het gaat om simpele tekstjes zoals:

"can not remame file *"
"can not copy file *"
enz.

Die * moet dan vervangen worden, en ik vraag me af of * daar dan een "gangbaar" teken voor is. Eigenlijk is het een soort van joker-teken zeg maar.
 
Willem vp

Willem vp

11/01/2014 00:27:50
Quote Anchor link
Zoals Wouter ook al zei zou ik hiervoor gewoon sprintf() gebruiken. Ik meen me te herinneren dat jij een beetje een optimalisatiefetisjist bent ;-) en aangezien de ingebouwde functies van PHP in C zijn geschreven kun je daar qua performance nooit tegenop met je eigen PHP-code.
 
Wouter J

Wouter J

11/01/2014 00:28:25
Quote Anchor link
Quote:
Maar dat kan ik niet (handig) met sprintf oplossen

Waarom kan dat niet?

En ja, je kan * gebruiken. Maar ik prefereer toch iets waarmee je duidelijk maakt wat het is, dus %s of %file_name%.

PS: De * wordt vaak gebruikt als wildchart teken, niet als replacement teken. Denk bijv. aan SELECT * FROM ... of glob('*.php').
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:34:37
Quote Anchor link
Oké, thanks.

>> Waarom kan dat niet?

Ik moet in een heel enkel geval 2 dingen vervangen, en dan kan het dat ie de verkeerde vervangt.

Is dit dan overigens mogelijk met sprintf() ?

'dit is %s %s'

Kan ik nu in de eerste keer sprintf alleen de 2e %s vervangen en in de 2e keer alleen de eerste?
Dus zeg maar dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$string
= sprintf('dit is %s %s', 'test'); // string moet nu worden 'dit is %s test';
$string = sprintf('dit is %s %s', 'een'); // string moet nu worden 'dit is een test';
?>

Kan je dat met sprintf voor elkaar krijgen? Dus bij de 1e keer sprintf moet de laatste %s worden vervangen, en bij de 2e keer moet de eerste %s worden vervangen. Kan dat? Want in dat geval kan ik het op die manier oplossen.
 
Willem vp

Willem vp

11/01/2014 00:36:48
Quote Anchor link
@Wouter:
En * wordt niet alleen gebruikt als wildcard, maar ook als quantifier in reguliere expressies...

@Ozzie:
Waarschijnlijk heb je iets voor ogen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$tmpl
= 'Foo bar *';
$msg = 'baz';
echo str_replace('*', $msg, $tmpl);
?>

Dat verschilt eigenlijk niet van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$tmpl
= 'Foo bar %s';
$msg = 'baz';
printf($tmpl, $msg);
?>
Gewijzigd op 11/01/2014 00:37:01 door Willem vp
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:39:00
Quote Anchor link
Ik ga het duidelijker proberen uit te leggen...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$string
= 'dit is %s %s'; // dit is de begin-string
$string = sprintf($string, 'test'); // string moet nu worden 'dit is %s test';
$string = sprintf($string, 'een');  // string moet nu worden 'dit is een test';
?>

Snap je wat ik bedoel?
 
Willem vp

Willem vp

11/01/2014 00:39:14
Quote Anchor link
Oh, je had al geantwoord ;-)

Waarom niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$string
= sprintf('dit is %s %s', 'een', 'test');
?>

of ligt dat teveel voor de hand?

Toevoeging op 11/01/2014 00:41:52:

En als je moeilijk wilt doen kan natuurlijk ook nog:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$string
= 'dit is %s %s'; // dit is de begin-string
$string = sprintf($string, '%s', 'test');
$string = sprintf($string, 'een');
?>

maar ik ben er nog niet over uit of ik dit mooi vind...
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:42:50
Quote Anchor link
Ja klopt, maar de ene sprintf() gebeurt in method A en die 2e in method B. In method A bereid ik de string voor voor method B. Dus in method A is de begin-string 'dit is %s %s' en moet de string worden 'dit is %s test'. Deze geef ik dan aan method B en dan moet het 'dit is een test' worden.

Het moet dus in 2 stappen.
 
Ivo P

Ivo P

11/01/2014 00:43:02
Quote Anchor link
of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

echo sprintf('een, %2$s, %1$s-%1$s', 'drie', 'twee');
   #  een twee drie-drie
?>


om aan te geven dat een waarde vaker voor kan komen, en dat de volgorde er niet per se toe doet
 
Willem vp

Willem vp

11/01/2014 00:49:10
Quote Anchor link
Ozzie PHP op 11/01/2014 00:42:50:
Ja klopt, maar de ene sprintf() gebeurt in method A en die 2e in method B. In method A bereid ik de string voor voor method B. Dus in method A is de begin-string 'dit is %s %s' en moet de string worden 'dit is %s test'. Deze geef ik dan aan method B en dan moet het 'dit is een test' worden.

Maar als ik nu terug ga naar je eerste post, waar je * wilt gebruiken als replacement character, heb je dan niet hetzelfde probleem wanneer je string "dit is * *" is? Overigens geef je een post verder aan dat je slechts één ding hoeft te vervangen. ;-)
Gewijzigd op 11/01/2014 00:50:00 door Willem vp
 
Ozzie PHP

Ozzie PHP

11/01/2014 00:51:11
Quote Anchor link
Thanks Ivo, maar nu ben ik wel erg benieuwd of mijn "probleem" is op te lossen.

We hebben dus de begin-string:

$string = 'dit is %s %s';

In ronde 1 moet in deze string alleen de laatste %s worden vervangen. Dan krijgen we:

$string = 'dit is %s test';

In de volgende ronde moet de overgebleven %s worden vervangen. Dan krijgen we:

$string = 'dit is een test';

Snappen jullie wat ik wil?



Toevoeging op 11/01/2014 00:52:23:

@Willem:

Zoals ik hierboven zei moet ik in een enkel geval 2 dingen vervangen ;) Anders had ik het gewoon met sprintf kunnen oplossen.

Maar snappen jullie de bedoeling. Kan me voorstellen dat het een beetje overkomt wat ik bedoel.
 
Willem vp

Willem vp

11/01/2014 01:08:49
Quote Anchor link
In dat geval zou ik het gewoon doen op een van de door Wouter beschreven manieren, dus met iets als %macro%:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$tmpl
= "dit is %foo% %bar%";
$foo = 'bar';
$bar = 'foo';
$tmpl = str_replace('%foo%',$foo,$tmpl);
$tmpl = str_replace('%bar%',$bar,$tmpl);
?>

Of, korter,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$tmpl
= str_replace(['%foo%','%bar%'], [$foo,$bar], $tmpl);
?>
Gewijzigd op 11/01/2014 01:15:04 door Willem vp
 
Ozzie PHP

Ozzie PHP

11/01/2014 01:17:03
Quote Anchor link
Hmm, oké...

Maar als ik je goed begrijp is dit onmogelijk:

sprintf('dit is %s %s', 'test');

en dat dan alleen die laatste %s wordt vervangen?

Bijv. zoiets als dit:

sprintf('dit is %s %1$s', 'test');

Dat test alleen wordt gebruikt voor nummer 1, en dat ie die andere ongemoeid laat... maar dit werkt dus niet.
 
Willem vp

Willem vp

11/01/2014 01:20:26
Quote Anchor link
In dat geval ga je een null value voeren aan een placeholder en dat is nooit aan te bevelen...
Eventueel zou je dus nog wel die ene %s kunnen vervangen door %s, zoals ik in een eerdere post al schreef. Je code wordt daar denk ik niet echt veel duidelijker door, maar het werkt wel.
Gewijzigd op 11/01/2014 01:21:01 door Willem vp
 
Ozzie PHP

Ozzie PHP

11/01/2014 01:25:41
Quote Anchor link
>> Eventueel zou je dus nog wel die ene %s kunnen vervangen door %s

Wat bedoel je?

>> In dat geval ga je een null value voeren aan een placeholder en dat is nooit aan te bevelen...

Nou het werkt sowieso niet, want beide %s worden dan vervangen :(
 
Wouter J

Wouter J

11/01/2014 07:48:04
Quote Anchor link
>> en dat dan alleen die laatste %s wordt vervangen?

Enof dat werkt. Lees eens de uitleg bij sprintf...
 
Koen Vlaswinkel

Koen Vlaswinkel

11/01/2014 07:54:52
Quote Anchor link
Dit werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$string
= 'dit is %%s %s'; // dit is de begin-string
$string = sprintf($string, 'test'); // string moet nu worden 'dit is %s test';
$string = sprintf($string, 'een');  // string moet nu worden 'dit is een test';
?>
 

Pagina: 1 2 volgende »



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.