Php 根据另一个数组重新索引并填充数组
我试图用两个数组中的信息创建一个表。以下是两个阵列: 第一个数组,用于表头Php 根据另一个数组重新索引并填充数组,php,arrays,default-value,Php,Arrays,Default Value,我试图用两个数组中的信息创建一个表。以下是两个阵列: 第一个数组,用于表头 Array ( [0] => Color [1] => Length [2] => Waist ) 第二个数组,需要修改的数组 Array ( [0] => Array [0] => green [1] => Color [1] => Array [0] => 23 [1] => Length
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]一个与表头具有相同的值。有什么想法吗
经过一些反馈后,另一种可接受的输出阵列结构是:
array(
array(
'Color' => 'green',
'Length' => 23,
'Waist' => null
),
array(
'Color' => null,
'Length' => null,
'Waist' => null
),
array(
'Color' => null,
'Length' => 23,
'Waist' => 24
)
)
对于一组简单的数据,您有一个复杂的数组结构。您的最终阵列能否像这样工作得更好
$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;
}
以可重用数组的形式生成默认值(一次),然后迭代输入数据并用每个项的“属性”集覆盖默认值 代码:()()
很难找出你的问题。您必须重新格式化数组吗?您能否更改生成它们的脚本以提供正确格式的数组?数字键的顺序是否重要?为什么不改为
Array([Color]=>green,[Length]=>23,[beight]=>24)
?这更符合逻辑。我评论而不是回答,因为它不能回答你的问题。你是对的,我将处理生成数组的脚本。我想我会让你知道,当我查看代码并添加了相关键时,我得到了比以前更干净的代码。由于我对php非常陌生,我完全忘记了键名是多么有用。所以,谢谢!
$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
)
);