Gå til innhold

Bruke en streng for å få til array


Anbefalte innlegg

Skrevet

litt kode:

 


$conf['bruker']['fornavn'] = "Trond";

// det jeg vil er å få til slik: ( dette går ikke, men i teorien ser det bra ut )

$array = "[bruker][fornavn];

$conf$array = "Trond";

Videoannonse
Annonse
Skrevet (endret)

hehe.. skal ikke flame deg :) sikkert dårlig forklart..

 

slik kan jeg gjør:

 

$a = "test";

$b = "tull";

 

$c[$a][$b] = "123";

 

print $c['test']['tull'];

 

// skriver ut: 123

 

Men jeg vil

$a = "[test][tull]";

 

$c$a = "123";

 

print $c$a;

 

EDIT: skrive feil

Endret av trondes
Skrevet (endret)

Jeg ser hva du mener...

Det er mulig å få til ved bruk av eval, da... Men det erjo eval, da (Skummelt) :(

 

Det er den måten jeg kommer på i farten nå...

<?
$array = "[bruker][fornavn]";
eval("\$conf$array = \"Trond\";");
echo $conf[bruker][fornavn]; // Gir Trond
echo $conf$array // Gir kompileringsfeil
eval("echo \$conf$array.\"<br>\";"); // Gir Trond
?>

Men som sagt så er det ikke veldig anbefalt å bruke eval. Da må du isåfall være HELT sikker på hva du kjører inn i funksjonen.

 

Men hvorfor vil du gjøre det på denne måten ?

 

EDIT:

En annen sak du kan se på, men som ikke vil funke som array, på en måte:

<?
$array = "[bruker][fornavn]";
$conf{$array} = "Trond";
echo $conf[bruker][fornavn]."<br>"; // Gir ingenting
echo $conf{$array}; // Gir Trond
?>

Endret av kakkle
Skrevet

Tror jeg har forstått problemet, og tror jeg har en løsning på problemet. (Som ikke bruker eval, selv om det også er mulig, men ikke anbefalt som kakkle selv sier.)

<?php
$address = array('bruker','fornavn');
$value = 'Trond';
$conf = array();
setArrayDeep($address,$conf,$value);
print_r($conf);
print getArrayDeep($address,$conf);


function setArrayDeep($address,&$array,$value) {
$key = array_shift($address);
if(!empty($address)) {
 $array[$key] = array();
 setArrayDeep($address,$array[$key],$value);
} else {
 $array[$key] = $value;
}
}
function getArrayDeep($address,$array) {
$key = array_shift($address);
if(!empty($address)) {
 return getArrayDeep($address,$array[$key]);
} else {
 return $array[$key];
}
}
?>

Det bør legges til en del sjekking av variabler i funksjonene. Deriblant om $address og $array virkelig er arrays.

Skrevet

En fin kode det, men det jeg var på jakt etter var om det var en function eller noe lignende som løste problemet. Problemeter, at jeg sammen med brukeren lagrer denne config strengen:

 

"nyhet|prside|10;bruker|passord|ja;nyhet|vis|ingress"

 

for å hente ut dette kjører jeg dette:

// blir lest fra database, lagre sammen med resten av dataen om brukeren
$bruker_conf = "nyhet|prside|10;bruker|passord|ja;nyhet|vis|ingress";

$conf = mk_conf( $bruker_conf);

print $conf['nyhet']['prside'];

// skriver ut: 10

function mk_conf( $bruker_conf){
$tmp = explode(";",$bruker_conf);

if(is_array($tmp)){
 foreach($tmp as $tmp2) {
 	list( $modulnavn, $confnavn, $innhold) = explode("|",$tmp2);
   $conf_array[$modulnavn][$confnavn] = $innhold;
 	}

 }
return $conf_array;
}

 

Det jeg var på jakt etter var en enklere måte å løse dette på. Kan ikke løse seg faste i den samme gamle tingen :)

Skrevet

Aha.. perfekt :) lært noe nytt i dag også...

 

men, *ser litt sint på stiber* hvorfor har du ikke sagt dette før ? feks noen år siden ? ;)

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...