Code Review Asked by Robert Wilde on December 1, 2020
Very difficult to explain in a sentence sorry so here is example.
I have this array:
$setParams = [
'repeat_delay' => [23, 1],
'repeat_type' => ['Hour', 'Day'],
];
that I want to turn into this
$wanted = [
[
'repeat_delay' => 23,
'repeat_type' => 'Hour'
],
[
'repeat_delay' => 1,
'repeat_type' => 'Day'
]
];
I have it working but wanting to know if there is a cleaner way, or even another way.
$newArray = [];
$setKeys = array_keys($setParams);
$setValues = array_values($setParams);
$isSetValueArray = array_filter($setValues,
static function ($setValue) {
return is_array($setValue);
});
if (!empty($isSetValueArray)) {
foreach ($setKeys as $keyCount => $key) {
foreach ($setValues as $valueCount => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
if ($keyCount === $valueCount) {
$newArray[$k][$key] = $v;
}
}
}
}
}
}
Some more information to help others. I am sorry I didn’t provide sooner as I know context is everything.
Here is a link to my snippet with more info and complete example.
Assuming you have the same number of items for each key, here are two alternative approaches:
Foreach:
<?php
$setParams = [
'repeat_delay' => [23, 1],
'repeat_type' => ['Hour', 'Day'],
];
$i = 0;
foreach($setParams['repeat_delay'] as $k => $v) {
$result[$i]['repeat_delay'] = $v;
$result[$i]['repeat_type'] = $setParams['repeat_type'][$k];
$i++;
}
Array map:
$result = array_map(null, ...array_values($setParams));
$keys = array_keys($setParams);
$result = array_map(function($v) use ($keys) { return array_combine($keys, $v);}, $result);
Both result in $result holding the following:
array (
0 =>
array (
'repeat_delay' => 23,
'repeat_type' => 'Hour',
),
1 =>
array (
'repeat_delay' => 1,
'repeat_type' => 'Day',
),
)
You could rewrite the last array_map with the array_combine to:
$result = array_map(fn($v) => array_combine($keys, $v), $result);
Using a short arrow function for brevity.
Correct answer by Progrock on December 1, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP