如何使用PHP创建自定义CSV文件?

如何使用PHP创建自定义CSV文件?,php,mysql,csv,Php,Mysql,Csv,在$csv_数组中,属性[0]表示我的csv文件的每一列。sku是产品id。在$csv\u数组中,属性[0]表示我的csv的所有产品id,它是sku列的行值。在下面的查询中,我提取了所有产品ID、属性名称和属性值。我的问题是,我必须计算$csv数组,以便为每个属性名称列指定属性值。在$final_字符串中,我想记住产品的所有属性值,请参见注释部分。请提前向Thx寻求帮助。我真的被这件事缠住了: $csv_array_attributes[0] = "sku%%".$head

在$csv_数组中,属性[0]表示我的csv文件的每一列。sku是产品id。在$csv\u数组中,属性[0]表示我的csv的所有产品id,它是sku列的行值。在下面的查询中,我提取了所有产品ID、属性名称和属性值。我的问题是,我必须计算$csv数组,以便为每个属性名称列指定属性值。在$final_字符串中,我想记住产品的所有属性值,请参见注释部分。请提前向Thx寻求帮助。我真的被这件事缠住了:

           $csv_array_attributes[0] = "sku%%".$header; 
                    //GETTING ATTRIBUTES VALUES
                    $i = 1;
                    foreach($xml->children() as $content){
                        $id_produs = $content->ProductCode;
                        $csv_array_attributes[$i] = $id_produs;
                        $i++;
                    }


                    $select = mysql_query("SELECT  id_prod.id_produs, GROUP_CONCAT('^^',nume_attr) AS nume_at, GROUP_CONCAT('^^',val_attr) AS val_at FROM attributes 
                    INNER JOIN id_prod   
                    ON id_prod.id_id_produs = attributes.id_produs 
                    GROUP BY id_prod.id_produs");
                    $i = 0;  $id_prod = array();
                    while ($row = mysql_fetch_array($select)){
                        $id_produs = $row['id_produs'];
                        $nume_attr = explode(",^^",substr($row['nume_at'],2));
                        $val_attr = explode(",^^",substr($row['val_attr'],2));
                        $id_prod[$id_produs] = $nume_attr;
                        $i++;
                    }
                    // var_dump(count($id_prod));
                    $nume = explode("%%", $csv_array_attributes[0]);
                    $csv[0] = $csv_array_attributes[0];


                    $i = 1;
                    foreach ($id_prod as $key => $value) {
    // comment part
                    //$final_string = "";
                    //if (attr_name has attribute_value for product i ){
                            //     $final_string.= attribute_value."%%";
                    //}else{
                            //      $final_string.= "%%";
                     //}
   //end comment part
                        $csv[$i] = $csv_array_attributes[$i]."%%".$final_string;
                        $i++;
                    }
                    //var_dump($csv_array_attributes[0])
                    //CREARE CSV
                    $file = fopen("attributes.csv","w+");
                    foreach ($csv as $line){
                        fputcsv($file,explode('%%',$line),"^","`");
                    }

要查看当前结果,请单击

实际上,我只能给您一个提示,说明如何为csv创建数组

// header
$csv[0][0] = "one";
$csv[0][1] = "two";
$csv[0][2] = "three";
$csv[0][3] = "four";
$csv[0][4] = "five";

// body
$csv[1][0] = "some";
$csv[1][1] = "values";
$csv[1][2] = "that";
$csv[1][3] = "could";
$csv[1][4] = "be";

$csv[2][0] = "here";
$csv[2][1] = "in";
$csv[2][2] = "this";
$csv[2][3] = "little";
$csv[2][4] = "array";
这只是查看阵列设置的示例

如果你已经设置了标题,让我们假设你可以填充二维数组。 如果已设置,则可以使用foreach来构建CSV

样品

csv输出

one;two;three;four;five;
some;values;that;could;be;
here;in;this;little;array;
a row;with an;;empty;field;

空字段是没有问题的,因为您用一个

共有2800个产品ID和2000个属性名称列,我忘了提及:|但我还必须检查x行到y列是否没有值,并将其留空使用此代码创建我的csv:$csv_output=explode$csv_输出;$file=fopenattributes.csv,w+;fputcsv$文件,$csv\u输出;我在第一行中获得了所有这些内容。您从何处接收创建csv的主要数据?ps:explode无法识别换行符。我不想从csv获取数据,我想创建数据并将其放入csv文件中,我使用fputcsvi询问您,您从哪里获取原始数据。您是从数据库中选择它还是什么?您接收并试图创建csv的原始数据是什么样子的?我只想知道/查看创建csv所需的数据。
one;two;three;four;five;
some;values;that;could;be;
here;in;this;little;array;
a row;with an;;empty;field;