|
| 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
| |
|
|