I'm trying to modify a multidimensional array inside a foreach loop using a function. However when I check my results with a print_r() the outcome is not what I want it to be and I'm not receiving any errors either.
foreach ($layoutData as $key => $data) {
$method = $data[ 'acf_fc_layout' ];
if (method_exists($this, $method)) {
$data = $this->$method($data);
}
$this->parseOptions($data);
}
Note: The foreach is inside a function called layouts(). I thought this was irrelevant so I left that out.
public function parseOptions($data) {
if (isset($data[ 'padded' ])) {
if ($data[ 'padded' ] == 'true') {
$data[ 'options' ][ 'padded' ] = true;
} else {
$data[ 'options' ][ 'padded' ] = false;
}
unset($data[ 'padded' ]);
}
if (isset($data[ 'background-color' ])) {
$data[ 'options' ][ 'background-color' ] = $data[ 'background-color' ];
if ($data[ 'options' ][ 'background-color' ] == 'white') {
$data[ 'options' ][ 'background-color' ] = false;
}
unset($data[ 'background-color' ]);
}
return $data;
}
print_r() result:
Array
(
[view] => signup
[data] => Array
(
[acf_fc_layout] => signup
[title] => Schrijf je snel in
[text] => Kickstarten begint met aanmelden. Doe het snel, dan maak je kans op een Samsung Galaxy S9.
)
[padded] => 'true'
[background-color] => 'dark-grey'
)
But what I want to achieve is:
Array
(
[view] => signup
[data] => Array
(
[acf_fc_layout] => signup
[title] => Schrijf je snel in
[text] => Kickstarten begint met aanmelden. Doe het snel, dan maak je kans op een Samsung Galaxy S9.
)
[options] => Array
(
[padded] => 'true'
[background-color] => 'dark-grey'
)
$datavariable is only a copy of the original value. Changing that won't change the original array. The above link should give you some more info about what you need to do. It's also explained in the manual about foreach - Magnus Eriksson