PHP导出SQL数据到.csv文件如何去除数组重复条目
问题原因
你遇到的双倍条目问题是sqlsrv_fetch_array函数的默认返回特性导致的:该函数默认使用SQLSRV_FETCH_BOTH作为提取类型,会同时返回数字索引和关联字段名索引的两套数组元素,所以3列的查询结果会返回6个元素的数组。
你之前尝试array_values无效的原因是:该函数只会提取原数组的所有值按顺序生成新数组,原本就存在的两套值不会被过滤,自然没有效果。
解决方法
只需要在调用sqlsrv_fetch_array时传入第二个参数指定提取类型即可,有两种可选方案:
- 方案1:仅获取关联数组(键为表字段名)
传入SQLSRV_FETCH_ASSOC参数,返回的数组只会包含id、survey_id、item三个键值对:
$sql="Select * from Percept_Segments"; $stmt = sqlsrv_query( $conn, $sql); while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){ // 此处$row仅含3个元素,键为字段名 var_dump($row); exit(); }
- 方案2:仅获取数字索引数组(键为0、1、2)
传入SQLSRV_FETCH_NUM参数,返回的数组只会包含数字索引的三个元素,适合直接写入CSV的场景:
$sql="Select * from Percept_Segments"; $stmt = sqlsrv_query( $conn, $sql); while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUM)){ // 此处$row仅含3个数字索引元素,可直接传入fputcsv写入文件 var_dump($row); exit(); }
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

