Gå til innhold

Bruke en streng for å få til array


Anbefalte innlegg

Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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.

Lenke til kommentar

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

Lenke til kommentar

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...