Avatar billede electrobeat_dk Nybegynder
17. maj 2007 - 15:30 Der er 28 kommentarer og
1 løsning

indsætte strings i string

Jeg ville høre om der fandtes en smart og velegnet løsning på at indstætte strings i en string

Jeg har en string og et array hvor jeg vil indsætte mine værdier fra mit array forskellige steder i min string

%int er så mine værdier

eks.
$string = 'Jeg har %0 kat(te), %1 hund(e) og %2 rensdyr i min have';

Selvfølgelig er det til at finde en løsning, men det kunne være at der i forvejen var en indbygget funktion i PHP lavet til formålet?
Avatar billede morhan Novice
17. maj 2007 - 15:33 #1
Avatar billede electrobeat_dk Nybegynder
17. maj 2007 - 15:41 #2
er der forskel på printf og sprintf?
Avatar billede Slater Ekspert
17. maj 2007 - 15:50 #3
Kun at sprintf returnerer strengen, hvor printf udskriver den.
Avatar billede erikjacobsen Ekspert
17. maj 2007 - 15:52 #4
Der er også:

$katte=7;$hunde=9;$rensdyr=13;
$string = "Jeg har $katte kat(te), $hunde hund(e) og $rensdyr rensdyr i min have";
Avatar billede freeagent Nybegynder
17. maj 2007 - 16:03 #5
måake kan du bruge funktionen:

str_replace()

http://www.php.net/manual/en/function.str-replace.php
Avatar billede electrobeat_dk Nybegynder
17. maj 2007 - 16:31 #6
Jeg skal have lavet en løsning hvor jeg kan have alle mine info- og fejlmeddelelser i et array, så jeg bliver fri for at de ligger spredt ud over 9999 filer. Jeg har lidt svært ved at overskue og finde den mest passende løsning, men det skal virke noget i retning som det her

$MSG_ARR = array(
'login_email01' => 'E-mail ikke fundet',
'msg_delete01' => '\\0 beskeder blev slettet',
'tst01' => 'Hej jeg har \\0 katte, \\1 hunde og \\2 rensdyr'
);

function gen_msg($msg, $arr = array())
{
//
}

Men som sagt er jeg lidt i vildrede for at finde den bedste løsning. Der kan som sagt være 0 eller flere værdier som skal indsættes i mine meddeleser
Avatar billede electrobeat_dk Nybegynder
17. maj 2007 - 16:34 #7
Det kan jo være jeg også griber det forkert an? Måske det skal opbygges på en anden måde? :)
Avatar billede erikjacobsen Ekspert
17. maj 2007 - 17:09 #8
Det er nok printf eller sprintf du skal have fat i. Se på http://dk.php.net/call_user_func_array denne smarte løsning:
<?php
function my_printf() {
  $args = func_get_args();
  return call_user_func_array('printf', $args);
}
?>
(Det er lidt bøvlet at have forskelligt antal parametre uden at bruge et array)
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 12:01 #9
mangler der ikke noget? jeg er ikke rigtig med på hvordan det fungerer?
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 12:14 #10
function my_printf()
{
    $args = func_get_args();
   
    return call_user_func_array('tst', $args);
}

function tst($arr)
{
    return printf('hey %s dig %s jeg er %s år', $arr);
}

echo my_printf('med', 10);
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 12:15 #11
hmm.. der er så lige et %s for meget, men får stadig fejl

Too few args
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 12:56 #12
Hvor kommer dine værdier fra? - det skulle ikke være så kompliceret som du gør det til?
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 13:16 #13
jamen så er jeg ikke helt med på hvordan
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 13:44 #14
Du skriver noget med:  "jeg har \\0 katte, \\1 hunde og \\2 rensdyr"  - hvor kommer de værdier fra?
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 13:54 #15
det var bare noget jeg skrev.. for man kan jo ikke indsætte variabler i en string :)

i mit indledende spørgsmål omtaler jeg også et array

jeg er ikke helt med på hvordan man får dit eksempel til at virke
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 13:55 #16
i en string = i en værdi i et array
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 14:00 #17
Og jeg er ikke med på hvor dine værdier kommer fra.
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 14:40 #18
jeg er netop heller ikke klar over hvor jeg skal sætte dem ind i dit eksempel :)

men jeg har mit array med de forskellige meddelelser

$MSG_ARR = array(
'login01' => 'E-mail ikke fundet',
'msg01' => '%s beskeder blev slettet',
'tst01' => 'Hej jeg har %s katte, %s hunde og %s rensdyr'
);

jeg skal så have lavet en funktion som formaterer den enkelte meddelelse

function gen_msg($msg, $arr = array())
{
// noget kode
}

gen_msg('tst01', array(43, 232, 2));
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 14:42 #19
men det behøver nødvendigvis heller ikke blive stillet op sådan her.. det eneste som er sikkert er at jeg har mit array $MSG_ARR.. Resten er op til hvad det vil virke bedst og mest dynamisk
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 15:10 #20
Hvis du bruger

function my_printf() {
  $args = func_get_args();
  return call_user_func_array('printf', $args);
}

så kan du formentlig:

  my_printf(array('Hej jeg har %s katte, %s hunde og %s rensdyr',43,232,2);

Men da nu du har dine tekster for sig, så formentlig (også utestet)

my_printf(array($MSG_ARR['tst01'],43,232,2);

Hvis du for det her til at virke kan vi se om det kan gøres smartere.
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 15:10 #21
"Hvis du FÅR det her ..." - sku' det ha' været.
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 15:26 #22
function my_printf() {
  $args = func_get_args();
  return call_user_func_array('printf', $args);
}

$MSG_ARR = array(
'login01' => 'E-mail ikke fundet',
'msg01' => '%s beskeder blev slettet',
'tst01' => 'Hej jeg har %s katte, %s hunde og %s rensdyr'
);

my_printf(array('Hej jeg har %s katte, %s hunde og %s rensdyr',43,232,2));

her får jeg et array.. men forsøger jeg at køre en foreach på resultatet på my_printf får jeg en fejl
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 15:27 #23
Invalid argument supplied for foreach()
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 15:28 #24
eller hvis jeg smider en implode omkring my_printf
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 15:54 #25
Der er nok et "array" for meget:

my_printf('Hej jeg har %s katte, %s hunde og %s rensdyr',43,232,2);
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 16:29 #26
takker.. lav et svar :)
Avatar billede erikjacobsen Ekspert
18. maj 2007 - 16:50 #27
Jeg samler slet ikke på point, tak. Og muligvis er det en smule for kompliceret, det vi har fundet på.
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 17:14 #28
jamen ok

For kompliceret? Du mener måske lidt det er en "lappeløsning"? :)
Avatar billede electrobeat_dk Nybegynder
18. maj 2007 - 17:18 #29
men jo, jeg kan selvfølig godt se at man jo i princippet bare kan gå udenom funktionen og så bare nøjes med

sprintf($MSG_ARR['tst01'], 23, 23, 32);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester