/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Forskellig Variabel-navn..
Fra : Niels Kristian Hanse~


Dato : 09-06-02 15:43

Hej

Måske er Subject lidt underligt, men jeg aner ikke hvordan jeg skal beskrive
problemet kort..

Jeg har et PHP-script som læser fra nogle filer, der angiver forskellige
variabler, og deres værdi.

Variablernes navne skal være frie.. PHP-scriptet skal lægge variablens værdi
ind i en variabel med det korrekte navn, og navnet varierer fra gang til
gang..

f.eks. står der i en text-fil, som bliver analyseret af PHP-scriptet:

arrangeby=name
page=1
blabla=2

- hvorefter PHP-scriptet selv lægger værdierne ind i variable med de
korrekte navne:

$arrangeby=name
$page=1
$blabla=2

Håber I forstår problemet!
Med venlig hilsen
Niels Skovmand.



 
 
Christian Joergensen (09-06-2002)
Kommentar
Fra : Christian Joergensen


Dato : 09-06-02 15:48

On Sun, 09 Jun 2002 16:42:35 +0200, Niels Kristian Hansen Skovmand wrote:

> Variablernes navne skal være frie.. PHP-scriptet skal lægge variablens
> værdi ind i en variabel med det korrekte navn, og navnet varierer fra
> gang til gang..
>
> f.eks. står der i en text-fil, som bliver analyseret af PHP-scriptet:
>
> arrangeby=name
> page=1
> blabla=2

Prøv at tage udgangspunkt i flg. utestede kode:

$foo = file("config.txt");
foreach ($foo as $line) {
ereg("^([^=]+)=(.+)$", $line, $regs);
$$regs[1] = $regs[2];
}

--
Christian Jørgensen | The knack of flying is learning how to throw
http://www.razor.dk | yourself at the ground and miss.

Thomas Lindgaard (09-06-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 09-06-02 16:13

Davs

>> Variablernes navne skal v‘re frie.

Du kunne evt. også lige modificere Christians kode lidt, så dine variable
bliver lagt ind i et associativt array i stedet - så skal du kun bruge et
frit variabelnavn:

$mine_fine_variable = array(
"arrangeBy" => "name",
   "page" => "1",
   "blabla" => "... det var bare det jeg ville sige, hej"
);

Mvh.
/Thomas

Niels Kristian Hanse~ (09-06-2002)
Kommentar
Fra : Niels Kristian Hanse~


Dato : 09-06-02 16:25

> Prøv at tage udgangspunkt i flg. utestede kode:
>
> $foo = file("config.txt");
> foreach ($foo as $line) {
> ereg("^([^=]+)=(.+)$", $line, $regs);

Hvorfor skal ereg være med som funktion, kunne det ikke gøres meget mere
simpelt?
Hvad er det helt præcis ereg gør i denne sammenhæng?

> $$regs[1] = $regs[2];
> }
>

Men det virker sgu, jeg må indrømme at jeg godt nok ikke helt forstår
princippet endnu. Du skal kun forklare det hvis du gider.

Ellers tusind tak for hjælpen!

/ Skovmand




Christian Joergensen (09-06-2002)
Kommentar
Fra : Christian Joergensen


Dato : 09-06-02 17:11

On Sun, 09 Jun 2002 17:24:49 +0200, Niels Kristian Hansen Skovmand wrote:

>> ereg("^([^=]+)=(.+)$", $line, $regs);

> Hvorfor skal ereg være med som funktion, kunne det ikke gøres meget mere
> simpelt? Hvad er det helt præcis ereg gør i denne sammenhæng?

Lad os sige at vi i $line har værdien "arrangeby=name". Formålet med
regex'en er at få opdelt den i 2. $regs[1] bliver "arrangeby" og $regs[2]
bliver "name".

>> $$regs[1] = $regs[2];

Her tager vi så variablen der har navnet fra værdien af $regs[1] (derfor
de to $) og sætter den til $regs[2]. Altså sætter vi $arrangeby = "name".

--
Christian Jørgensen | It's so complicated, it can't crash.
http://www.razor.dk |

Peter Brodersen (09-06-2002)
Kommentar
Fra : Peter Brodersen


Dato : 09-06-02 19:06

On Sun, 09 Jun 2002 16:48:06 +0200, Christian Joergensen
<mail@phpguru.dk> wrote:

>$foo = file("config.txt");
>foreach ($foo as $line) {

Når du læser en fil ind med file(), bliver linjeskiftet også taget
med. Hver af dine $line's vil så også indeholde linjeskift (\r\n eller
\n).
Det vil sige at ved:
arrangeby=name
.... bliver $arrangeby sat til "name\n".

Tillige vil:
arrangeby = name
.... også skabe problemet, da det her er ${'arrangeby '}, der bliver
sat til " name\n".

En hurtig løsning kunne være:
${trim($regs[1])} = trim($regs[2]);
Men man kommer let til blot at genopfinde parse_ini_file(), der jo
virker glimrende i forvejen. Jeg kan således kun anbefale denne
funktion.

--
- Peter Brodersen

Peter Brodersen (09-06-2002)
Kommentar
Fra : Peter Brodersen


Dato : 09-06-02 18:57

On Sun, 9 Jun 2002 16:42:35 +0200, "Niels Kristian Hansen Skovmand"
<woodman@wman.dk> wrote:

>f.eks. står der i en text-fil, som bliver analyseret af PHP-scriptet:

Tillad mig at henlede opmærksomheden på den glimrende, men
tilsyneladende meget oversete php-funktion: parse_ini_file()

Fx:
$data = parse_ini_file("konfigurationsfil.txt");

Så bliver det i dit tilfælde lagt ind i et array:
$data['arrangeby']
$data['page']
$data['blabla']

Du kan frit tilføje flere ting i konfigurationsfilen. Kig evt. på:
http://dk.php.net/manual/en/function.parse-ini-file.php
... der altså burde overflødigøre folks hjemmelavede parser-funktioner.

Funktionen kan også bruges mere avanceret, men det er der ingen grund
til at gå ind i, for at løse dette problem.
--
- Peter Brodersen

Jakob Møbjerg Nielse~ (10-06-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 10-06-02 18:01

> Håber I forstår problemet!

Et lille hint:

<?php
$var1 = "var2";
$$var1 = "Virker det?";
echo $var1."\n".$var2;
?>

Vil udskrive:

var2
Virker det?

$$var1 og $var2 indeholder altså det samme, i det tilfælde at $var1
indeholder strengen "var2".

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
| -- Terry Pratchett, Reaper Man



Søg
Reklame
Statistik
Spørgsmål : 177503
Tips : 31968
Nyheder : 719565
Indlæg : 6408545
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste