我正在尝试使用来自两个数组的信息创建表。以下是两个数组:
第一个数组,用于表头
Array
(
[0] => Color
[1] => Length
[2] => Waist
)
第二个数组,需要修改的数组
Array
(
[0] => Array
[0] => green [1] => Color
[1] => Array
[0] => 23 [1] => Length
)
Array
(
[0] =>
)
Array
(
[0] => Array
[0] => 23 [1] => Length
[1] => Array
[0] => 24 [1] => Waist
)
数组需要如下所示:
Array
(
[0] => Array
[0] => green [1] => Color
[1] => Array
[0] => 23 [1] => Length
[2] => Array
[0] => [1] => Waist
Array
(
[0] => Array
[0] => [1] => Color
[1] => Array
[0] => [1] => Length
[2] => Array
[0] => [1] => Waist
Array
(
[0] => Array
[0] => [1] => Color
[1] => Array
[0] => 23 [1] => Length
[2] => Array
[0] => 24 [1] => Waist
所以重点是第一级中的键需要匹配构成表头的数组中的键,其中[1]第二级中的键与表头具有相同的值。有任何想法吗?
答案 0 :(得分:2)
您有一个复杂的数组结构,可以轻松设置一组数据。你的最终阵列可以更好地工作吗?
$data = array(
array(
'Color' => 'green',
'Length' => 23,
'Waist' => NULL
),
array(
'Color' => NULL,
'Length' => NULL,
'Waist' => NULL
),
array(
'Color' => NULL,
'Length' => 23,
'Waist' => 24
)
);
如果你的结构已经死了,那么这应该有效:
function format_my_array($keys, $malformed) {
foreach ($malformed as $key => $fragments) {
$temp = array(
'Color' => NULL,
'Length' => NULL,
'Waist' => NULL
);
foreach ($fragments as $fragment) {
if (isset($fragment[1])) {
switch($fragment[1]) {
case 'Length':
$temp['Length'] = $fragment[1];
break;
case 'Waist':
$temp['Waist'] = $fragment[1];
break;
default:
$temp['Color'] = $fragment[1];
break;
}
}
}
$malformed[$key] = array(
array($temp['Color'], 'Color'),
array($temp['Length'], 'Length'),
array($temp['Waist'], 'Waist')
);
}
return $malformed;
}
答案 1 :(得分:0)
php有一个带阵列功能的gigangtig库,看看它们你肯定会找到你需要的东西我建议从 array_merge array_merge_recursive array_combine
答案 2 :(得分:0)
将默认值(一次)生成为可重复使用的数组,然后迭代您的输入数据,并使用每个项目的“属性”集覆盖默认值。
代码:(Demo)(PHP7.4+ Demo)
$headers = ['Color', 'Length', 'Waist'];
$data = [
[
['green', 'Color'],
['23', 'Length'],
],
[],
[
['23', 'Length'],
['24', 'Waist'],
],
];
$defaults = array_fill_keys($headers, null);
var_export(
array_map(
function($item) use($defaults) {
return array_replace($defaults, array_column($item, 0, 1));
},
$data
)
);