Kom ihåg mig?
Home Menu

Menu


[PHP] Array Index som sträng

Ämnesverktyg Visningsalternativ
Oläst 2012-01-22, 13:41 #1
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Thumbs down [PHP] Array Index som sträng

Hej,

jag undrar varför jag inte kan använda strängar som array index för att få ut värden i PHP?
Finns det något annat sätt att göra det på (inga evals!!)? Jag börjar få hjärnsläpp...

PHP-kod:
  $arr = array(
    
"foo" => array(
      
"bar" => "abc",
      
"baz" => "CBA"
    
)
  );
  
  
$string "['foo']['bar']";

  echo 
$arr['foo']['bar']; // abc
  
echo $arr{$string}; // Undefined index: ['foo']['bar'] 
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-01-22, 14:05 #2
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Är ju inga problem om du använder en eval. Annars skulle det enda jag kommer på vara att splitta strängen för varje nivå i arrayen och sen skriva ut $arr[$part1][$part2].
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-01-22, 15:36 #3
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Det är det jag var rädd för, det är nämligen så att jag håller på med att ta fram ett eget templating system och undviker evals så långt jag kan pga. säkerhet och prestanda.
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-01-22, 16:22 #4
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Om du gör det en gång lär det vara något snabbare att loopa ut array-nycklarna en för en och hämta variabeln. Men om du kombinerar alla dina evals till en som du kör sist/när du behöver så kommer prestanda-skillnaden att vara minimal. Det är initieringen av eval som är väldigt långsam, inte exekveringen av koden.

En annan teknik som ofta används är att kompilera templates till vanliga script-filer, i ditt fall PHP. På så sätt slipper du parsa templates vid varje request utan endast när en kompilerad fil är out of date.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-01-22, 17:23 #5
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
Clarence, tack för ditt svar. Såsom det nu fungerar är att preg_replace körs på template filen och byter ut alla {{$whatever}} mot innehållet i motsvarande variabel som sätts i modellen. Sedan har jag ett cache-system som cachar resultatfilen i X antal minuter (om man sätter flaggan till att den skall cacha). Jag har såklart redan kikat på källkoden till Smarty, Templatum m.m. men jag kan inte få till ett 100% resultat såsom jag vill ha det. Syftet är att till slut kunna ha liknande syntax:

1. {{ $hej }} // innehållet i variabeln $hej printas ut
2. {{ for n = 1 to 100 }} // counters
3. {{ $hej['hopp'][1] }} // skriva ut andra värdet i array $hej med index 'hopp'
...
jayzee är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:44.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017