我有一个名为$rows
的数组。第一行是标题。 第一列是X
(输入信号),其他列是Y1
,Y2
,Y3
等(输出信号)。 对于任何X
值的一些Y
值可能是NULL
。如何通过删除空值来压缩/重新排列多维数组
$first_key = key($rows);
foreach ($rows as $key => $row) {
if($key == $first_key) { // print header
fputcsv($out, array_keys($row));
}
fputcsv($out, $row);
}
这个代码看起来像这样的输出(通过X
列排序):
X | Y1 | Y2 | Y3 |
--------------------------
0.1 | | 10 | |
0.5 | 90 | | 7 |
0.7 | 15 | 40 | |
1.2 | | 12 | |
目标:
我用这个代码打印重组输出有列X1
,Y1
,X2
,Y2
等,使得在每一对(Xi
,Yi
)中没有NULL
(空)值在行数据和第e报头:
X1 | Y1 | X2 | Y2 | X3 | Y3 |
------------------------------------------
0.5 | 90 | 0.1 | 10 | 0.5| 7 |
0.7 | 15 | 0.7 | 40 | | |
| | 1.2 | 12 | | |
我尝试:
$current_header = array_keys($rows[0]);
$size = count($current_header);
$new_header=array(); // the new header: X1, Y1, X2, Y2,...
$arr_X=array();
$arr_Y=array();
$x_column=$current_header[0];
for ($i=1; $i<$size; $i++) {
$y_column=$current_header[$i];
$new_header[2*$i] = $x_column;
$new_header[2*$i+1] = $y_column;
$arr_Y[$y_column] = array_column($rows, $y_column);
$arr_X[$y_column] = array_column($rows, $x_column);
}
下一步:加入$arr_X[$y_column]
和$arr_Y[$y_column]
为arr_XY
。我认为在这个数组中键应该是索引(row#);也arr_XY
不应该包括其中$arr_Y[$y_column]
是NULL
点:我不知道该怎么办呢
$arr_XY=array();
for ($i=1; $i<$size; $i++) {
$y_column=$current_header[$i];
// here should be the code to join arrays and eliminate NULL arr_Y points
$arr_XY[$y_column] = ($arr_X[$y_column], $arr_Y[$y_column]);
}
的最后一步是在我需要帮助的:建立并通过行的所有arr_XY[$y_column]
合并打印输出行指数。
为了完整起见,你可以发布一个(缩短的)你的数组的'var_dump'吗? – ccKep
{[“X”] => float(0.1) [“Y1”] => NULL [“Y2”] => float(10.0) [“Y3”] => NULL } – user510040