我正在读csv文件和array_map()函数在这个函数中做了什么?

时间:2017-09-30 10:18:45

标签: php csv multidimensional-array array-map

在PHP中,我想读一个" .CSV"文件使用以下功能。

function csv_to_array($filename='a.txt',  $header_exist=true, $delimiter="\t")
{
    if(!file_exists($filename) || !is_readable($filename))
        return FALSE;

    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            if($header_exist)
            {
                if(!$header)
                    $header = array_map('trim', $row);
                else
                    $data[] = array_combine($header, $row);
            }
            else
                $data[] = $row;
        }
        fclose($handle);
    }
    return $data;
}

我对array_map()功能感到困惑。我认为应该将列名称映射到每个属性,那么如何获取和显示eacg属性?

谢谢!

2 个答案:

答案 0 :(得分:1)

打开array_map的手册页,您可以看到:

  

array_map - 将回调应用于给定数组的元素

所以,你有一个回调,它是trim(一个核心的php函数)和一个数组,$row。因此,函数trim现已应用于$row的每个元素。

所以,它相当于:

$header = [];
foreach ($row as $item) {
    $header[] = trim($item);
}

答案 1 :(得分:-1)

在PHP中,array_map(function_name, array)函数会将array的每个值发送到function_name()并返回一个新的array

在您的情况下,$header保留string列名称,由 , 分隔。这意味着array_map()函数会将它们转换为array

希望你明白。