在使用QueryList进行递归采集时,range
方法用于指定采集的范围。如果你希望在递归采集时避免数据合并,可以通过以下方式来实现:
each
方法逐个处理数据each
方法可以逐个处理采集到的数据,而不是将所有数据合并在一起。你可以在each
方法中处理每个采集到的数据项,并将其存储到单独的变量或数组中。
use QL\QueryList;
$url = 'http://example.com';
$data = [];
QueryList::get($url)->range('your-range-selector')->rules([
'title' => ['h1', 'text'],
'link' => ['a', 'href']
])->query()->each(function($item) use (&$data) {
// 处理每个采集到的数据项
$data[] = $item;
});
print_r($data);
map
方法处理数据map
方法可以对采集到的数据进行映射处理,并且不会自动合并数据。你可以在map
方法中对每个数据项进行处理,并将其存储到单独的变量或数组中。
use QL\QueryList;
$url = 'http://example.com';
$data = QueryList::get($url)->range('your-range-selector')->rules([
'title' => ['h1', 'text'],
'link' => ['a', 'href']
])->query()->map(function($item) {
// 处理每个采集到的数据项
return $item;
})->all();
print_r($data);
reduce
方法处理数据reduce
方法可以对采集到的数据进行累加处理,并且不会自动合并数据。你可以在reduce
方法中对每个数据项进行处理,并将其存储到单独的变量或数组中。
use QL\QueryList;
$url = 'http://example.com';
$data = QueryList::get($url)->range('your-range-selector')->rules([
'title' => ['h1', 'text'],
'link' => ['a', 'href']
])->query()->reduce(function($carry, $item) {
// 处理每个采集到的数据项
$carry[] = $item;
return $carry;
}, []);
print_r($data);
getData
方法获取原始数据如果你不希望QueryList自动合并数据,可以使用getData
方法获取原始数据,然后手动处理这些数据。
use QL\QueryList;
$url = 'http://example.com';
$data = QueryList::get($url)->range('your-range-selector')->rules([
'title' => ['h1', 'text'],
'link' => ['a', 'href']
])->query()->getData();
print_r($data);
setData
方法手动设置数据如果你希望完全控制数据的处理过程,可以使用setData
方法手动设置数据。
use QL\QueryList;
$url = 'http://example.com';
$data = [];
QueryList::get($url)->range('your-range-selector')->rules([
'title' => ['h1', 'text'],
'link' => ['a', 'href']
])->query()->setData(function($item) use (&$data) {
// 处理每个采集到的数据项
$data[] = $item;
});
print_r($data);
通过使用each
、map
、reduce
、getData
或setData
方法,你可以在QueryList递归采集时避免数据合并,并根据需要处理每个采集到的数据项。选择合适的方法取决于你的具体需求和数据处理逻辑。