Toon posts:

[php] omzetten string naar multi-dimensionele array*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met iets cools en ook iets top-secrets :) (ik zal hem posten als ie af is).

Nu heb ik een probleempje:
Ik heb de volgende string: "home/www.web-con.nl/" en de string "mail".

Nu wil ik checken of $dir['home']['www.web-con.nl']['mail'] = "mail"; zo is.

Maar dit moet kan dus net zo goed gaan om
"home/www.web-con.nl/mail/users/" en "root" en dan wil ik weten of $dir['home']['www.web-con.nl']['mail']['users']['root'] = "root";

Daar had ik deze code voor gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$temp_val = "dir";
$i = 0;

$array_location = split("/", $location_field);

while($i < count($array_location)-1)
{
            
    $$temp_val[$array_location[$i]] = $array_location[$i];
    $temp_val = $$temp_val;

    print($i);
    //print_r($temp_val);
    //print($$temp_val);
            
    $i++;
}
        

if (in_array($newdir, $temp_val))
    { }


Maar dit werkt niet. $location_field en $newdir zijn de twee strings die meegegeven worden. $location_field is dan de waarde met dat "home/etc" en $newdir met degene die de laatste key en de value van de array vormt.

Wie kan mij uit de brand helpen?

Verwijderd

Topicstarter
Kan een mod de titel misschien even veranderen "[php] omzetten string naar multi-dimensionele array". Dat past toch beter denk ik.

Alvast bedankt :)

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

wat jij wil kan dus niet he?

$a[b] = 'bla';
$a[b][c] = 'boe';
$a[b][c][d] = 'blerk';

leg eens uit wat je nou eigenlijk wil.

eigenlijk raar wat je (nu) wil: je wil kijken of na
$a[$b] = $b;

dan
$a[$b] == $b;

...

*insert signature here


Verwijderd

Topicstarter
Misschien dat het nog niet helemaal duidelijk was:

Ik wil een algoritme met de volgende twee parameters: $location_field en $newdir.
Hij moet $location_field omzetten naar de volgende array
$dir['key1']['key2'] ['etc']
dat moet ie dus doen voor het aantal dat er waardes zijn in $location_field, gesplit op '/'.
Dus bij "home/www.web-con.nl/" zijn het er twee.
Dan moet ie achter die array nog es zetten ['$newdir']. Dus om nog mara es een concreet voorbeeld te geven:
Dit:
$location_field = "home/www.web-con.nl/mail/users/";
$newdir = "root";

Moet de multi-dimensionale array $dir['home']['www.web-con.nl']['mail']['users']['root'] worden, dewelke ofwel als waarde 'root' moet hebben, of die zelf een array is, doordat hij zelf ook nog submappen heeft.

edit: Onee, hij hoeft er geen $newdir meer achter te zetten, dat is al gebeurd in de echte $dir var, degene die gemaakt wordt is nl. alleen een copy om een check mee te doen

Verwijderd

Ik denk dat je niet split, maar explode moet gebruiken.

$array_location = explode("/", $location_field);

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

dat maakt niet uit


ben je d'r al uit?

*insert signature here


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

zo niet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$location_field = 'home/www.web-con.nl/mail/users/'; 
$location_field = preg_replace("/\/$/", '', $location_field);
$location_field = preg_replace("/^\//", '', $location_field); 
// explode is sneller dan split
$array_location = explode('/', $location_field);

$tmp = array();
$ind = count($array_location)-1;
$tmp["$array_location[$ind]"] = $array_location[$ind];

for($i=(count($array_location)-2);$i>=0;$i--) {
  $tmp2["$array_location[$i]"] = $tmp;
  $tmp = $tmp2;
  $tmp2 = array();
}
 
print_r($tmp);

*insert signature here


Verwijderd

Topicstarter
Dank je, daar kan ik wel mee verder!

Verwijderd

Topicstarter
Uiteindelijk was het nog simpeler te doen:
PHP:
1
2
3
            $tmp = preg_replace("|(.*)/|Uis", "['\\1']", $location_field.$newdir."/");
            $tmp = "\$temp_val = \$dir".$tmp.";";
            eval($tmp);


Al is eval vies :), toch houd ik het zo denk ik...

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

hehe, ik had ook aan een eval oplossing gedacht, maar idd:
PHP:
1
eval = evil;


;)

*insert signature here


Verwijderd

Topicstarter
Ok hij is nog heel beta en erg beperkt qua functies, maar hier is ie wel:
http://www.web-con.nl/trash/winux

Het is een nep-linux. Ik ben van plan het erg uitgebreid te maken, voor de ultimate wannebe-os feeling :).
Tell me what you think of it!

Het werkt (natuurlijk) helemaal op zich, het is niet gewoon een interface voor telnet of wat dan ook (zou een beetje onveilig zijn). De dirs en files bestaan ook niet echt, maar worden op een alternatieve manier opgeslagen...

Als je er niet uit komt, volg dan de raad in het scherm op en typ help.

BTW: ik vermoed dat ie IE-only is...

Mag de titel nu misschien veranderd worden in [php] project winux :o ?

[ Voor 0% gewijzigd door Verwijderd op 05-08-2002 01:47 . Reden: laatste regel toegevoegd ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 24-08 21:59

Macros

I'm watching...

btw, als het nep linux is, dan hoort dir niet te werken en ls wel totdat ik zelf een alias aanmaak ;) Verder ziet het er wel cool uit :)

"Beauty is the ultimate defence against complexity." David Gelernter


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 24-08 21:59

Macros

I'm watching...

Tip 2:
cd /
moet naar de root dir gaan
cd ~ naar de homedir
cd . naar de huidige directory :)

"Beauty is the ultimate defence against complexity." David Gelernter


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 24-08 21:59

Macros

I'm watching...

Tip 3:
het cd commando heeft geen output :)

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
Right-o! Ik zal het vanavond aanpassen :)

BTW: ik had cd \ wel al naar root laten gaan... maar / nog niet

Verwijderd

Topicstarter
Ok, ik heb je opmerkingen doorgevoerd, Macros!

Verder ondersteunt 'ie nu ook pwd en heeft ie een eenvoudige mail-client :~

Volgende stappen zijn het uitvoeren van (nep)bestanden via exec ofzow en de mogelijkheid om een username/pass aan te maken, daarmee in te loggen en dan een paar opties in te mogen stellen :)
Pagina: 1