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?

<?
// 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;
}
?>
Zet vlak voor regel 38: $activiteit[$regel][$kolom] = array();
Verander regel 46 in: $activiteit[$regel][$kolom][] = $resources[$extra_dimensie];
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
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:
<?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)
?>
SanThe, Dank je wel voor je antwoord. Helder!

Reageren