aan een 2 dimensionele array een 3e dimensie toevoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan B

Jan B

07/07/2011 16:59:40
Quote Anchor link
Ik ben aan het stoeien met arrays. Ik wil aan een 2 dimensionele array een derde dimensie toevoegen als in een waarde van een array meerdere namen voorkomen.

Het lukt mij om deze namen er uit te filteren, maar het lukt niet om een extra dimenstie toe te voegen aan de array. Als de array (structuur) wordt uitgelezen blijkt dat er nog steeds sprake te zijn van een twee dimensionele array.

Bovenaan in het programma (kopje out array), in de vorm van commentaar, is de structuur opgenomen zoals het zou moeten worden.

Uiteindelijk gaat dit programman onderdeel worden van een groter geheel waar in een csv file wordt uitgelezen.

Wat moet er veranderd worden?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?
// input array
$activiteit[0][0] = 4;
$activiteit[0][1] = "Ja";
$activiteit[0][2] = "40 uur";
$activiteit[0][3] = "Erwin";
$activiteit[1][0] = 5;
$activiteit[1][1] = "Ja";
$activiteit[1][2] = "4 uur";
$activiteit[1][3] = "Erwin,Jan,Maarten";

// output array
// $activiteit[0][0] = 4;
// $activiteit[0][1] = "Ja";
// $activiteit[0][2] = "40 uur";
// $activiteit[0][3] = "Erwin";

// $activiteit[1][0] = 5;
// $activiteit[1][1] = "Ja";
// $activiteit[1][2] = "4 uur";
// $activiteit[1][3][0] = "Erwin";
// $activiteit[1][3][1] = "Jan";
// $activiteit[1][3][2] = "Maarten";


$aantal = count($activiteit);
foreach($activiteit as $regel => $rij)
{

    foreach( $rij as $kolom => $waarde)
    {

        echo "regel ". $regel. " kolom ". $kolom. " waarde ". $waarde. "<br>";
        if ($kolom == 3)
        {

            $resources = explode(",", $waarde);
            $aantal_resources = count($resources);
            if ($aantal_resources !== 1) // als in de string meerder namen voorkomen (gescheiden door komma's)
            {
//                echo $aantal_resources. "<br>";
                for ($teller = 1; $teller <= $aantal_resources; $teller++) // maak voor elke naam een array aan
                {
                $extra_dimensie = $teller - 1;
                echo "regel " . $regel;
                echo " kolom " .$kolom;
                echo " extra dimensie ". $extra_dimensie;
                echo " resoure ". $resources[$extra_dimensie]. "<br>";

                $activiteit[$regel][$kolom][$extra_dimensie] = $resources[$extra_dimensie];
                echo "nieuwe waarde in array: ". $activiteit[$regel][$kolom][$extra_dimensie] . "<br>";
                }
            }
// endif ($aantal_resources !== 1)
        } // ($kolom == 3)
    } // foreach( $rij as $kolom => $waarde)
} // foreach($activiteit as $regel => $rij)

preprint($activiteit);

// USAGE:  preprint($x);   <- where $x = array()
function preprint($s, $return=false)
{

    $x = "<pre>";
    $x .= print_r($s, 1);
//        $x .= print_r(array_keys($s), 1);
    $x .= "</pre>";
    if ($return) return $x;
    else print $x;
}

?>
 
PHP hulp

PHP hulp

27/11/2024 01:38:08
 
- SanThe -

- SanThe -

07/07/2011 18:05:52
Quote Anchor link
Zet vlak voor regel 38: $activiteit[$regel][$kolom] = array();
Verander regel 46 in: $activiteit[$regel][$kolom][] = $resources[$extra_dimensie];
 
Jan B

Jan B

07/07/2011 21:44:03
Quote Anchor link
SanThe, Hartelijk dank voor je (snelle) reactie. Geweldig dat het werkt!! Ik kan nu weer verder. De tweede wijziging had ik zelf ook bedacht. De eerste echter niet.
Waarom dient op op die plaats de array "$activiteit[$regel][$kolom] = array()te worden gedeclareerd. Ik leef in de veronderstelling dat eenmaal voldoende is. Deze staat bovenaan in het programma.
Ik hoop dat je deze vraag nog wil beantwoorden.
Alvast bedankt!
Groet Jan B
 
- SanThe -

- SanThe -

07/07/2011 22:14:13
Quote Anchor link
In het array staat op [1][3] => Erwin,Jan,Maarten en dat is een string. Je moet daar dus eerst een array() van maken om het verderop te vullen met de losse namen.

Je kan ook gewoon altijd een array() maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach($activiteit as $regel => $rij)
{

    foreach( $rij as $kolom => $waarde)
    {

        if ($kolom == 3)
        {

            $activiteit[$regel][$kolom] = explode(",", $waarde);
            
        }
// ($kolom == 3)
    } // foreach( $rij as $kolom => $waarde)
} // foreach($activiteit as $regel => $rij)
?>
 
Jan B

Jan B

08/07/2011 12:34:52
Quote Anchor link
SanThe, Dank je wel voor je antwoord. Helder!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.