CSV解析器链接
#编程 #php #csv

在我的最后两篇文章中,我介绍了CSV读取器以及过滤器和映射功能的基础知识。在这篇文章中,我想介绍链接功能。链接类似于地图。主要区别是地图返回格式化的字符串。链接返回您喜欢从回调方法返回的任何内容。一个很好的例子是地址数据。您有一个CSV文件,其中包含一个客户数据,其中包含一个地址。可以说您想将其隔离到客户对象中的地址对象中。

首先创建地址对象

class Address
{
    

    public static function fromCSV(stdClass $data): Address
    {
        $me = new static();

        // you'll need to do validation on each field

        $me->address = $data->Address;
        $me->city = $data->City;
        $me->state = $data->State;
        $me->zip = $data->Zip;
        $me->country = $data->Country;

        return $me;
    }
}

然后您需要创建链接并将其添加到读者中。

$link = new Link(
    'objAddress',  // Field to call that will trigger this link
    [
        'Address', 'City', 'State', 'Zip', 'Country'
    ], // The fields as they appear in the CSV after removing invalid characters
    [
        Address::class, 'fromCSV'
    ], // The *optional* callable method to pass the data to
);
$reader->addLink($link);

然后,当您调用阅读器并引用objAddress属性时,它将调用该方法Address::fromCSV,并且它将通过每个字段作为公共属性传递在stdClass对象中。回调参数是可选的,如果省略,返回将是那个stdClass对象。这也是一个不错的选择。