为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
莫回无 2022-08-19 10:55:40
由于这个解决方案是从其他地方投票充分的答案改编而来的,我没想到会遇到问题。问题:我想使用 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 IDmpnfunction 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;}    }            }
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我将把它简化为SSCCE,这样它就很容易理解和复制。


我认为你把这里的解决方案过于复杂化了,这可能是导致你这么多奇怪错误的原因。解决方案实际上相当简单。您需要做的就是获取每个csv文件,将其解析为行和列,然后将每行合并到一行中以将其写回另一个csv。


这是最简单的方法:


$file0 = <<<'FILE0'

Manufacturer ID,image,description

SKU231,image1.jpg,A box.

SKUAG1,image22.jpg,Another box.

SKU21D,image7a.png,A third box.

FILE0;


$file1 = <<<'FILE1'

mpn,length,height,width,title

SKU231,22,14,10,Box 1

SKUAG1,12,6,6,Box 2

SKU21D,5,8,5,Box 3

FILE1;


$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) {


    $newRow = array_merge($columns, $csv2[$row]);

    fputcsv($fd, $newRow);


}


$fd = fopen("/tmp/test.csv", "r");


while (($line = fgets($fd)) !== false) {

    echo $line;

}

结果:


"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"

|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 |



查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号