aan een 2 dimensionele array een 3e dimensie toevoegen
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)
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
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;
}
?>
// 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;
}
?>
Verander regel 46 in: $activiteit[$regel][$kolom][] = $resources[$extra_dimensie];
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
Je kan ook gewoon altijd een array() maken:
SanThe, Dank je wel voor je antwoord. Helder!