konto usunięte

Temat: Tablica stringów i zmienne wewnętrzne.

Mam w oddzielnym pliku tablicę stringów:

tab[0] = "Dodano {$XXX} komentarzy";
tab[1] = "Usunięto {$YYY} komentarzy";
...

----------------------------------------
i teraz mam funkcję

function wyswietl() {

//[wczytanie pliku]
$XXX = 10;
$XXX = 20;

echo tab[0]; // ma wyswietlic "Dodano 10 komentarzy"
echo tab[1]; // ma wyswietlic "Usunięto 20 komentarzy"
}



Jak zrobić, żeby w pliku z tablicą stringów zdefiniować zmienne, które będą dopiero zdefiniowane w funkcji wyswietl()
?
Chodzi o rozwiązanie zgodne ze sztuką.
Piotr Krzyszkowski

Piotr Krzyszkowski Specjalista IT,
ALIOR BANK S.A.

Temat: Tablica stringów i zmienne wewnętrzne.

Damian, lepiej zrobić to tak:

1) w tablicy tab[] trzymasz tylko ilość komentarzy
np. tab[0] = 10, tab[1] = -13
(wartość minusowa oznacza, że usunięto x komentarzy)

2) funkcja wyświetl będzie mieć logikę do budowania informacji

function wyswietl()
{
//wczytanie pliku

if($tab[0] >= 0)
echo 'dodano ' . $tab[0] . ' komentarzy';
else
echo 'usunieto ' . abs($tab[0]) . ' komentarzy';
}

Oczywiście można to ulepszyć;Piotr Krzyszkowski edytował(a) ten post dnia 05.01.11 o godzinie 20:50

konto usunięte

Temat: Tablica stringów i zmienne wewnętrzne.

No tak to właśnie być nie może.

Tablica zawierającą teksty musi być w oddzielnym pliku -jak napisałem.
Dodatkowo jest ładowana tylko raz (require_once) na początku pliku.
Robert Nodzewski

Robert Nodzewski Tworzenie serwisów
www oraz paneli do
zarządzania/raporto.
..

Temat: Tablica stringów i zmienne wewnętrzne.

No to nie:
Dodano {$XXX} komentarzy
bo to jest przecież od razu parsowane
a np:
Dodano #XXX# komentarzy
a potem str_replace

albo
Dodano %s komentarzy
a potem sprintf

konto usunięte

Temat: Tablica stringów i zmienne wewnętrzne.

Robert Nodzewski:
Dodano %s komentarzy
a potem sprintf

W ten deseń. thx
Stanisław P.

Stanisław P. Software designer

Temat: Tablica stringów i zmienne wewnętrzne.

Damian N.:
Chodzi o rozwiązanie zgodne ze sztuką.
Zgodnie ze sztuką, to lepiej nie odkrywać koła na nowo ;)

Albo:
echo sprintf(_("Dodano %d komentarzy"), $XXX);

Albo nawet:
echo sprintf(ngettext("Dodano %d komentarz", "Dodano %d komentarzy", $XXX), $XXX);

http://www.php.net/manual/en/ref.gettext.php

Edit: %i poprawiony na %dStanisław P. edytował(a) ten post dnia 06.01.11 o godzinie 02:29
Piotr Krzyszkowski

Piotr Krzyszkowski Specjalista IT,
ALIOR BANK S.A.

Temat: Tablica stringów i zmienne wewnętrzne.

Damian N.:
No tak to właśnie być nie może.

Tablica zawierającą teksty musi być w oddzielnym pliku -jak napisałem.
Dodatkowo jest ładowana tylko raz (require_once) na początku pliku.



$XXX = 23;
tab[0] = "Usunięto {$XXX} komentarzy";
echo eval(tab[0]);

Przy czym funkcja eval() nie jest zalecana ze względu na bezpieczeństwo i wydajnośćPiotr Krzyszkowski edytował(a) ten post dnia 05.01.11 o godzinie 21:48
Robert Nodzewski

Robert Nodzewski Tworzenie serwisów
www oraz paneli do
zarządzania/raporto.
..

Temat: Tablica stringów i zmienne wewnętrzne.

Piotr Krzyszkowski:

$XXX = 23;
tab[0] = "Usunięto {$XXX} komentarzy";
echo eval(tab[0]);
Przeciez to jest bezsensu. Przeciez zanim do evala dojdzie to kod już się sparsuje. A dwa to od kiedy tekst "BlaBla" może byc wykonany przez eval? Przeciez eval działa na kodzie php a nie tekscie tekstowym :)
A trzy - odpowiedzi już padły ;)
Piotr Krzyszkowski

Piotr Krzyszkowski Specjalista IT,
ALIOR BANK S.A.

Temat: Tablica stringów i zmienne wewnętrzne.

Robert Nodzewski:
Piotr Krzyszkowski:

$XXX = 23;
tab[0] = "Usunięto {$XXX} komentarzy";
echo eval(tab[0]);
Przeciez to jest bezsensu. Przeciez zanim do evala dojdzie to kod już się sparsuje. A dwa to od kiedy tekst "BlaBla" może byc wykonany przez eval? Przeciez eval działa na kodzie php a nie tekscie tekstowym :)
A trzy - odpowiedzi już padły ;)

Sorka miało być:

$XXX = "23";
tab[0] = 'Usunięto $XXX komentarzy';
echo eval(tab[0]);Piotr Krzyszkowski edytował(a) ten post dnia 05.01.11 o godzinie 21:58
Robert Nodzewski

Robert Nodzewski Tworzenie serwisów
www oraz paneli do
zarządzania/raporto.
..

Temat: Tablica stringów i zmienne wewnętrzne.

Piotr Krzyszkowski:
Sorka miało być:

$XXX = 23;
tab[0] = 'Usunięto $XXX komentarzy';
echo eval(tab[0]);

Pozwol, ze przytoczę moje poprzednie zdanie:
". A dwa to od kiedy tekst "BlaBla" może byc wykonany przez eval? Przeciez eval działa na kodzie php a nie tekscie tekstowym "
:)
Piotr Krzyszkowski

Piotr Krzyszkowski Specjalista IT,
ALIOR BANK S.A.

Temat: Tablica stringów i zmienne wewnętrzne.

Robert Nodzewski:
Piotr Krzyszkowski:
Sorka miało być:

$XXX = 23;
tab[0] = 'Usunięto $XXX komentarzy';
echo eval(tab[0]);

Pozwol, ze przytoczę moje poprzednie zdanie:
". A dwa to od kiedy tekst "BlaBla" może byc wykonany przez eval? Przeciez eval działa na kodzie php a nie tekscie tekstowym "
:)

Tak, masz rację - pisałem z głowy bez wcześniejszego sprawdzenia
(eval(string) występuje w java script i z tym mi się pomyliło)

$tab[0] = 'Usunięto $XXX komentarzy';

$XXX = 23;

eval("\$tab[0] = \"$tab[0]\";");
echo $tab[0];

// wyświetli: Usunięto 23 komentarzyPiotr Krzyszkowski edytował(a) ten post dnia 05.01.11 o godzinie 23:04
Maciej W.

Maciej W. Ruby on what?!

Temat: Tablica stringów i zmienne wewnętrzne.

Stanisław P.:
Damian N.:
Chodzi o rozwiązanie zgodne ze sztuką.
Zgodnie ze sztuką, to lepiej nie odkrywać koła na nowo ;)

Albo:
echo sprintf(_("Dodano %i komentarzy"), $XXX);

Albo nawet:
echo sprintf(ngettext("Dodano %i komentarz", "Dodano %i komentarzy", $XXX), $XXX);

http://www.php.net/manual/en/ref.gettext.php

W PHP chyba nie ma %i, jest tylko %d.

Piotr Krzyszkowski:
$tab[0] = 'Usunięto $XXX komentarzy';

$XXX = 23;

eval("\$tab[0] = \"$tab[0]\";");
echo $tab[0];

Coz ci zlego printf uczynil ze tak kombinujesz?Maciej Wojdyr edytował(a) ten post dnia 06.01.11 o godzinie 01:05
Piotr Krzyszkowski

Piotr Krzyszkowski Specjalista IT,
ALIOR BANK S.A.

Temat: Tablica stringów i zmienne wewnętrzne.


Coz ci zlego printf uczynil ze tak kombinujesz?Maciej Wojdyr edytował(a) ten post dnia 06.01.11 o godzinie 01:05

Jak już wypaliłem z tym eval() to musiałem się poprawić.

Oczywiście, nie polecam tego rozwiązania.



Wyślij zaproszenie do