PHP 左加入无法加入匹配的记录

由于这个解决方案是从其他地方投票充分的答案改编而来的,我没想到会遇到问题。


问题:我想使用 file1.csv file0.csv。LEFT JOIN


文件0.csv


    +-----------------+-------------+--------------+

    | Manufacturer ID |    image    | description  |

    +-----------------+-------------+--------------+

    | SKU231          | image1.jpg  | A box.       |

    | SKUAG1          | image22.jpg | Another box. |

    | SKU21D          | image7a.png | A third box. |

    +-----------------+-------------+--------------+

文件1.csv:


    

    +--------+--------+--------+-------+-------+

    |  mpn   | length | height | width | title |

    +--------+--------+--------+-------+-------+

    | SKU231 |     22 |     14 |    10 | Box 1 |

    | SKUAG1 |     12 |      6 |     6 | Box 2 |

    | SKU21D |      5 |      8 |     5 | Box 3 |

    +--------+--------+--------+-------+-------+

所需结果(文件2.csv):


    +-----------------+-------------+--------------+--------+--------+--------+-------+-------+

    | Manufacturer ID |    image    | description  |  mpn   | length | height | width | title |

    +-----------------+-------------+--------------+--------+--------+--------+-------+-------+

    | SKU231          | image1.jpg  | A box.       | SKU231 |     22 |     14 |    10 | Box 1 |

    | SKUAG1          | image22.jpg | Another box. | SKUAG1 |     12 |      6 |     6 | Box 2 |

    | SKU21D          | image7a.png | A third box. | SKU21D |      5 |      8 |     5 | Box 3 |

    +-----------------+-------------+--------------+--------+--------+--------+-------+-------+

PHP 函数分别与 on 和:LEFT JOINfile0.csvfile1.csvManufacturer IDmpn


function my_csv_join(array $csv_input_file_array, $csv_output_file, $html_preview, $left_join_on, $right_join_on = NULL ){



    if(count($csv_input_file_array) > 2){echo 'This function probably only works for 2 csv files being joined at a time.  Reapply iteratively if needed.  Exiting now.'; exit;}


    }        

    }


莫回无
浏览 92回答 1
1回答

慕妹3146593

我将把它简化为SSCCE,这样它就很容易理解和复制。我认为你把这里的解决方案过于复杂化了,这可能是导致你这么多奇怪错误的原因。解决方案实际上相当简单。您需要做的就是获取每个csv文件,将其解析为行和列,然后将每行合并到一行中以将其写回另一个csv。这是最简单的方法:$file0 = <<<'FILE0'Manufacturer ID,image,descriptionSKU231,image1.jpg,A box.SKUAG1,image22.jpg,Another box.SKU21D,image7a.png,A third box.FILE0;$file1 = <<<'FILE1'mpn,length,height,width,titleSKU231,22,14,10,Box 1SKUAG1,12,6,6,Box 2SKU21D,5,8,5,Box 3FILE1;$csv1 = array_map('str_getcsv', explode("\n", $file0));$csv2 = array_map('str_getcsv', explode("\n", $file1));$fd = fopen("/tmp/test.csv", 'w');foreach ($csv1 as $row => $columns) {&nbsp; &nbsp; $newRow = array_merge($columns, $csv2[$row]);&nbsp; &nbsp; fputcsv($fd, $newRow);}$fd = fopen("/tmp/test.csv", "r");while (($line = fgets($fd)) !== false) {&nbsp; &nbsp; echo $line;}结果:"Manufacturer ID",image,description,mpn,length,height,width,titleSKU231,image1.jpg,"A box.",SKU231,22,14,10,"Box 1"SKUAG1,image22.jpg,"Another box.",SKUAG1,12,6,6,"Box 2"SKU21D,image7a.png,"A third box.",SKU21D,5,8,5,"Box 3"|Manufacturer ID | image&nbsp; &nbsp; &nbsp; &nbsp;| description&nbsp; | mpn&nbsp; &nbsp; | length | height | width | title ||----------------|-------------|--------------|--------|--------|--------|-------|-------|| SKU231&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| image1.jpg&nbsp; | A box.&nbsp; &nbsp; &nbsp; &nbsp;| SKU231 | 22&nbsp; &nbsp; &nbsp;| 14&nbsp; &nbsp; &nbsp;| 10&nbsp; &nbsp; | Box 1 || SKUAG1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| image22.jpg | Another box. | SKUAG1 | 12&nbsp; &nbsp; &nbsp;| 6&nbsp; &nbsp; &nbsp; | 6&nbsp; &nbsp; &nbsp;| Box 2 || SKU21D&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| image7a.png | A third box. | SKU21D | 5&nbsp; &nbsp; &nbsp; | 8&nbsp; &nbsp; &nbsp; | 5&nbsp; &nbsp; &nbsp;| Box 3 |
打开App,查看更多内容
随时随地看视频慕课网APP