[PHP] Multi-dimensionaal array opbouwen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met een probleem waar ik niet echt uit kan komen. Ik moet een multi-dimensionaal array opbouwen vanuit een andere array. Misschien wat lastig uitleggen zo, maar als simpele code misschien wat duidelijker wat de bedoeling is:

code:
1
2
3
4
5
6
7
8
// Originele array
$array = ("waarde1","waarde2","waarde3");

// Waarde welke erin moet komen
$value = "Dit moet erin gezet worden";

// Dit moet het dan worden
$array2['waarde1']['waarde2']['waarde3'] = $value;


Hierbij moet rekening gehouden worden dat $array uit meer of minder waardes kan bestaan.
Weet iemand voor mij hoe dit opgelost moet worden?

Acties:
  • 0 Henk 'm!

Verwijderd

Hierbij moet rekening gehouden worden dat $array uit meer of minder waardes kan bestaan.
Weet iemand voor mij hoe dit opgelost moet worden?
Wat bedoel je precies met meer of minder waardes?
meerdere dimensies of meerder waardes per dimensie?

[ Voor 55% gewijzigd door Verwijderd op 28-11-2005 09:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Meer of minder dimensies is mogelijk.

Acties:
  • 0 Henk 'm!

Verwijderd

zoiets:

PHP:
1
2
3
4
5
$index = "";
foreach ($array as $val) {
  $index = "['".$val."']";
}
eval($array2.$index = $value);

Ik weet niet zeker of het werkt...

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Misschien een heel vieze oplossing met eval()?

PHP:
1
2
3
4
5
6
7
8
// Originele array
$array = ("waarde1","waarde2","waarde3");

// Waarde welke erin moet komen
$value = "Dit moet erin gezet worden";

$expr = '$array2[\''.implode("']['", $array).'\'] = $value';
eval($expr);


Nooit mee gewerkt verder, maar het is een mogelijke oplossing. Anders kan je wellicht met een for-loop werken, maar dan krijg je volgens mij veel te veel tijdelijke variabelen.

Acties:
  • 0 Henk 'm!

Verwijderd

@sjroorda: Ja, zo kan het dus ook :).

Volgens mij gaat die eval bij mij niet goed...

[ Voor 41% gewijzigd door Verwijderd op 28-11-2005 09:19 ]


Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Een wat minder ranzige oplossing is met een reference.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    // Originele array
    $array = array("waarde1","waarde2","waarde3");
    
    // Waarde welke erin moet komen
    $value = "Dit moet erin gezet worden";
    
    // Maak nieuwe array en pointer voor die array aan.
    $newArray = array();
    $thisArray = &$newArray;
    
    // Loop door array.
    for( $i = 0; $i < count($array); $i++ )
    {
        if( $i != (count($array) - 1) )
        {
            $thisArray = array($array[$i]=>array());
            $thisArray = &$thisArray[$array[$i]];
        }
        else
        {
            $thisArray = array($array[$i]=>$value);
        }
    }
    
    // Print de array even uit :)
    print_r($newArray);
?>


edit:
Zat een klein telfoutje in :X

[ Voor 12% gewijzigd door Huppie op 28-11-2005 09:40 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

of korter:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Originele array
$array = array("waarde1","waarde2","waarde3");

// Waarde welke erin moet komen
$value = "Dit moet erin gezet worden";

$array2 = array();
$pointer =& $array2;
foreach ($array as $key)
{
    if (!isset($pointer[$key]))
    {
        $pointer[$key] = array();
    }
    $pointer =& $pointer[$key];
}

$pointer = $value;

print_r($array2);

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Waarvoor wil je dit gaan gebruiken? Ik vind het nogal een rare manier van programmeren en ik denk dat het ook wel op een nettere manier opgelost moet kunnen worden.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ga het gebruiken voor het netjes verdelen van een XML document. Via deze manier komt de array er op een goede manier uit te zien wanneer deze verschillende dieptes heeft. Het laatste voorbeeld heb ik gebruikt en werkt goed.

Acties:
  • 0 Henk 'm!

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

kan je niet gewoon de diepte aangeven met een getal bijvoorbeeld?

Multimonitor is relax :P


Acties:
  • 0 Henk 'm!

Verwijderd

MeIsTwisted schreef op maandag 28 november 2005 @ 10:39:
kan je niet gewoon de diepte aangeven met een getal bijvoorbeeld?
of gebruik objecten, bijvoorbeeld:

niveau1.niveau2.niveau3.niveau4

elk niveau is dan van hetzelfde objecttype en kan zichzelf als kind hebben...

Acties:
  • 0 Henk 'm!

Verwijderd

Lijkt bijna op een DOM-parser...
Waarom gebruik je zoiets niet?

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Inderdaad dat was ook mijn idee, door het met objecten op te lossen heb je een veel nettere oplossing die ook nogeens uitbreidbaar is.

If I can't fix it, it ain't broken.

Pagina: 1