我已经努力整天为多维数组创建一个 合并函数
。情景有点不同,也很难用语言描述清楚。因此我将尝试用实际示例来解释。
$actual_array = [
'assets' => [1, 2, 3],
'liabilities' => [1, 2, 3, 4, 5, 6],
'equity' => [1],
'income' => [1, 2, 3, 4],
'expenses' => [1, 2, 3]
];
$merge = [
'balance_sheet' => ['assets', 'liabilities', 'equity'],
'income' => ['income', 'expenses'],
];
self::merge( $merge, $actual_array );
该函数将合并指定列,然后进行转置并填充结果。
public static function merge( array $merges, array $data )
{
$bigger_array_length = 0;
$arr = [];
$columns = [];
foreach ($merges as $key => $merge) {
foreach ($merge as $index => $column) {
//check which array has bigger length in the iteration
if($bigger_array_length < count($data[$column]))
$bigger_array_length = count($data[$column]);
$columns[] = $column;
}
//when i die and dump the columns array on its first iterate
dd($columns); // assets, liabilities, equity
if($bigger_array_length> 0) {
$total_columns = count($columns);// on first iteration 3 assets, liabilities and equity
for($i = 0; $i < $bigger_array_length; $i++) {
//
$arr[$key][] = [
$columns[$total_columns - 1] => isset($data[ $columns[$total_columns - 1] ][$i]) ? $data[ $columns[$total_columns - 1] ][$i] : 0,
$columns[$total_columns - 2] => isset($data[ $columns[$total_columns - 2] ][$i]) ? $data[ $columns[$total_columns - 2] ][$i] : 0,
$columns[$total_columns - 3] => isset($data[ $columns[$total_columns - 3] ][$i]) ? $data[ $columns[$total_columns - 3] ][$i] : 0
];
}
}
//when i die and dump on first iteration then it's just fine
array:1 [▼
"balance_sheet" => array:6 [▼
0 => array:3 [▼
"equity" => 1
"liabilities" => 1
"assets" => 1
]
1 => array:3 [▼
"equity" => 0
"liabilities" => 2
"assets" => 2
]
2 => array:3 [▼
"equity" => 0
"liabilities" => 3
"assets" => 3
]
3 => array:3 [▼
"equity" => 0
"liabilities" => 4
"assets" => 0
]
4 => array:3 [▼
"equity" => 0
"liabilities" => 5
"assets" => 0
]
5 => array:3 [▼
"equity" => 0
"liabilities" => 6
"assets" => 0
]
]
]
$columns = [];
}
}
我现在被困在这里,无法想出如何使其具有动态性。
[$total_columns - 1] // the 1, 2, 3 or so on
//something like [$total_columns - $i]
如果我让foreach运行第二次,那么它会输出未定义的索引错误
。
例如,[$total_columns - 3]
在第二次迭代中将导致-1索引
,因为第二次迭代只有2个总列
。
这将导致偏移量未定义:-1
。
我想要实现的目标:
"balance_sheet" => array:6 [▼
0 => array:3 [▼
"equity" => 1
"liabilities" => 1
"assets" => 1
]
1 => array:3 [▼
"equity" => 0
"liabilities" => 2
"assets" => 2
]
2 => array:3 [▼
"equity" => 0
"liabilities" => 3
"assets" => 3
]
3 => array:3 [▼
"equity" => 0
"liabilities" => 4
"assets" => 0
]
4 => array:3 [▼
"equity" => 0
"liabilities" => 5
"assets" => 0
]
5 => array:3 [▼
"equity" => 0
"liabilities" => 6
"assets" => 0
]
],
"income" => array:4 [▼
0 => array:2 [▼
"expenses" => 1
"income" => 1
]
1 => array:2 [▼
"expenses" => 2
"income" => 2
]
2 => array:2 [▼
"expenses" => 3
"income" => 3
]
3 => array:2 [▼
"expenses" => 0
"income" => 4
]
]
]
[$total_columns - $i]
这样的。 - Basheer Kharotiself::merge($merge, $actual_array);
时,你仍然没有说明你期望得到什么结果。 - axiac