我尝试了我能找到的一切,但我无法得到我想要的结果。我正在获取两个 txt 文件,以各种可能的方式将它们组合在一起,没有重复项,并将输出保存到 CSV 文件中。
一切正常,除了我无法让它删除中间空间。例如:
列表1.txt:
1
2
列表2.txt:
dog
cat
我得到的结果是:
dog 1, dog 2, cat 1, cat 2, 1 dog, 2 dog, 1 cat, 2 cat
但我需要(见空格):
dog1, dog2, cat1, cat2, 1dog, 2dog, 1cat, 2cat
法典:
<?php
$array1 = file('list1.txt');
$array2 = file('list2.txt');
$array3 = array();
$array4 = array();
foreach ($array1 as $key1)
{
foreach ($array2 as $key2)
{
$array3[] = $key1 . $key2;
{
$array4[] = $key2 . $key1;
}
}
}
print_r($array3);
print_r($array4);
$fp = fopen('combined.csv', 'w');
fputcsv($fp, $array3);
fputcsv($fp, $array4);
fclose($fp);
?>
感谢 Rizier123 的帮助,我通过简单地更改第 3 行和第 4 行来解决问题,如下所示:
$array1 = file('list1.txt', FILE_IGNORE_NEW_LINES);
$array2 = file('list2.txt', FILE_IGNORE_NEW_LINES);
问题是由于我的两个列表文件中的换行符,因为数组中使用的每个关键字都在单独的行上。
使用以下代码
foreach ($array1 as $key1){
foreach ($array2 as $key2){
$array3[] = trim($key1).trim($key2);
$array4[] = trim($key2).trim($key1);
}
}
或使用array_map函数修剪数组的所有元素
$array = array_map('trim', $array);
正如 Ravinder 和 Rizier 所说,使用 trim()。所以例如:
<?php
$array1 = file('list1.txt');
$array2 = file('list2.txt');
$array3 = array();
$array4 = array();
foreach ($array1 as $key1)
{
foreach ($array2 as $key2)
{
$array3[] = trim($key1) . trim($key2);
$array4[] = trim($key2) . trim($key1);
}
}
print_r($array3);
print_r($array4);
$fp = fopen('combined.csv', 'w');
fputcsv($fp, $array3);
fputcsv($fp, $array4);
fclose($fp);
?>
作为旁注,看起来您的代码中有几个杂散{
和}
。您需要删除这些代码才能成功完成。
试试这个foreach
循环:
foreach ($array1 as $key1)
{
foreach ($array2 as $key2)
{
$key1 = trim($key1);
$key2 = trim($key2);
/*
If the above doesn't work, try this method:
(If you use this method, you should delete your $array3 and $array4 assignments)
$arrangement['array3'] = $key1.$key2;
$arrangement2['array4'] = $key2.$key1;
foreach($arrangements as $arrayName=>$str) {
$str = preg_replace('#^([^ ]+) ([^ ]+)$#', '', $str);
$$arrayName[] = $str;
}
*/
$array3[] = $key1 . $key2;
{
$array4[] = $key2 . $key1;
}
}
}