【发布时间】:2023-03-17 23:09:01
【问题描述】:
我正在使用一个外部类 (Zebra_cURL) 来执行多个 HTTP GET 请求。它的工作方式如下:
$items = array(
0=>array('url' => 'url0'),
1=>array('url' => 'url1'),
2=>array('url' => 'url2'),
3=>array('url' => 'url3'),
);
$curl = new Zebra_cURL();
$curl->get(array_column($urls,'url'),'scan_item',$moreimfo);
function scan_item($result,$moreimfo){
$items[$key]['size'] = strlen($result->body);
}
所以我的回调应该用每个 url 的更多信息填充我的 $items 数组(在我的情况下 - 页面大小)。所以缺少一个$key 变量。
这个类支持回调中的额外参数(在我的例子中是$moreimfo)。但据我了解,传递给每个回调的数据将始终相同。
$result 包含原始 url 信息的对象 ($result->info['url'])。所以我可以用它来找到需要的数组元素。但是,如果数组的大小足够大,这看起来效率太低了。
我认为我应该找到如何为每个回调执行传递数组成员键信息。不修改原来的类可以吗?
【问题讨论】:
-
“不修改原来的类”——我不这么认为。但由于它“只是”一个哈希表查找,数组必须变得多大才能让这个变得难以忍受?
-
@VolkerK 实际上我不知道。我只是认为数组上的
strcmp应该比通过 known 键选择正确的元素要慢得多。所以也许我应该跳过我的不喜欢并使用strcmp,但看到代码效率低下我只是感到紧张。 -
为什么是
strcmp?如果您使用带有字符串作为键的数组,则在访问数组元素时会对字符串进行哈希处理,并且访问速度非常快。 -
哦,我今天瞎了.... 以为 url 是数组的键。没关系 ;-) 但是可以使用 url 作为 $items 中的键而不是 0,1,2,3 吗?
-
@VolkerK 嗯...没想到!谢谢你的想法!