Php 如何在导出到CSV时更改阵列的顺序?

Php 如何在导出到CSV时更改阵列的顺序?,php,csv,Php,Csv,用户将选择要导出的特定列。我正在使用in_arrayPHP函数搜索列是否被选中。我的问题是,我的列名与行值不匹配 数组push中的第二个参数是该列的数据 这是我的密码: $values = $_POST['fields']; $columnName = array(); foreach ($values as $value) { array_push($columnName, $value); } fputcsv($output, $columnName, $delimeter); $l

用户将选择要导出的特定列。我正在使用
in_array
PHP函数搜索列是否被选中。我的问题是,我的列名与行值不匹配

数组push中的第二个参数是该列的数据

这是我的密码:

$values = $_POST['fields'];
$columnName = array();

foreach ($values as $value) {
   array_push($columnName, $value);
}
fputcsv($output, $columnName, $delimeter);
$linedata = array();
if (in_array("Full Name", $values)) {
    array_push($linedata, $info_name[$i]);
}
if (in_array("Contact", $values)) {
    array_push($linedata, $info_mobile[$i]);
}
if (in_array("DOB", $values)) {
    array_push($linedata, $info_dob[$i]);
}
if (in_array("Gender", $values)) {
    array_push($linedata, $info_gender[$i]);
}
if (in_array("BUMO", $values)) {
    array_push($linedata, $info_bumo[$i]);
}
if (in_array("Address", $values)) {
    array_push($linedata, $info_address[$i]);
}
if (in_array("Bar Name", $values)) {
    array_push($linedata, $info_barName[$i]);
}
if (in_array("Reward Name", $values)) {
    array_push($linedata, $info_rewardName[$i]);
}
if (in_array("BA", $values)) {
    array_push($linedata, $info_BAName[$i]);
}
if (in_array("Date Registration", $values)) {
    array_push($linedata, $info_dateRegister[$i]);
}           
fputcsv($output, $linedata, $delimeter);

您需要在
$values
上循环,并将相应数组中的元素添加到
$linedata
,以便它们的顺序相同

$linedata = [];
foreach ($values as $value) {
    switch ($value) {
        case 'Full Name':
            $linedata[] = $info_name[$i];
            break;
        case 'Contact':
            $linedata[] = $info_mobile[$i];
            break;
        case 'DOB':
            $linedata[] = $info_dob[$i];
            break;
        ...
    }
}
fputcsv($output, $linedata, $delimiter);
也不需要第一个
foreach
循环
$columnName
只是
$values
的一个副本,因此您可以使用

fputcsv($output, $values, $delimiter);

写入标题行。

该值来自何处?从数据库?最好是有一个列的白名单,然后只选择用户选择的列,而不是选择所有列,然后过滤后处理!成功了。我只是把fputcsv放在foreach后面。