php - 将二维数组转换为类似表格的结构
问题描述
我有一个二维数组作为输入。例子:
$input = [
[1,2,3],
[11, "a" => "val_a"],
[12,'b' => 'val_b', 'a' => 'val2_a'],
[2 => 22]
];
我想将其转换为具有表格结构的数组。在类表结构中,所有子数组(行)具有完全相同的键,顺序相同。这些键是第二级所有键的并集。
新键:[0, 1, 2, 'a', 'b']
输入数组中不存在的元素接收值 NULL。我期待以下结果:
$expected = [
[ 0 => 1, 1 => 2, 2 => 3, 'a' => NULL, 'b' => NULL],
[ 0 => 11, 1 => NULL, 2 => NULL, 'a' => "val_a", 'b' => NULL],
[ 0 => 12, 1 => NULL, 2 => NULL, 'a' => "val2_a", 'b' => "val_b"],
[ 0 => NULL, 1 => NULL, 2 => 22, 'a' => NULL, 'b' => NULL]
];
到目前为止我已经尝试过:
function rectify($array){
$maxRow = [];
foreach($array as $row){
$maxRow += $row;
}
$new = [];
foreach($array as $key => $row){
foreach($maxRow as $mKey => $mVal){
$new[$key][$mKey] = array_key_exists($mKey,$row) ? $row[$mKey] : NULL;
}
}
return $new;
}
该函数提供正确的结果。由于一个查询有 2 个嵌套循环,因此该解决方案非常复杂。另一次尝试返回相同的密钥,但顺序不同。
解决方案
此代码首先标识数据中的所有列。然后它创建一个空模板数组(array_unique
用于删除重复项)。
然后它再次循环遍历行并用于array_replace
填充每一行的值......
$headers = [];
foreach ( $input as $row ) {
$headers = array_merge($headers, array_keys($row));
}
$headers = array_fill_keys(array_unique($headers), null);
$output = [];
foreach ( $input as $row ) {
$output[] = array_replace($headers, $row);
}
推荐阅读
- node.js - CORS请求不成功,webpack socket.io客户端
- reactjs - 如何在离子反应中以最简单的方式从一个组件传递参数并在另一个组件中获取它
- bash - 在没有终端的情况下在终端中重新运行 bash 脚本
- node.js - 如何在 nginx 上为反应应用程序设置代理通行证?
- ios - Xcode 中大约 100 个错误,未定义符号。在我的统一项目中
- google-cloud-sql - 如何从 Google App Maker 连接到 Google Cloud SQL 数据库作为外部 mysql 数据库?
- reactjs - React中的预增量运算符?
- django - 如何使用 heroku 将新的 pip 包添加到已部署的应用程序
- javascript - 输入值时,Knockout observable 错误地改变了数学计算的结果
- python - 如何根据坐标更新numpy数组