我用 file() 得到的数组值输出中的空格


Spaces in the output from array values which I got with file()

我尝试了我能找到的一切,但我无法得到我想要的结果。我正在获取两个 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;
        }
    }
}