在我的最后两篇文章中,我介绍了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
对象。这也是一个不错的选择。