3 回答

TA贡献1829条经验 获得超9个赞
您想要做的是将访问分散到 150 个代理上。在这种情况下,没有必要随机进行。你可以通过数组。
<?php
$array = [0, 1, 2, 3, 4, 5, 6];
for ( $i = 1; $i < 20; $i++ )
{
echo getNext($array) . '<br>';
}
function getNext (&$array) {
$e = next($array); // Every time next element is selected. Each output is different.
if ($e)
return $e;
else
return reset($array);
}
?>

TA贡献1865条经验 获得超7个赞
这似乎是生成器的一个很好的应用程序。这一个采用一组代理地址并以随机顺序在数组上循环,每次重新开始循环时都会对数组进行洗牌。
function get_proxy($proxies) {
$i = 0;
$len = count($proxies);
while (true) {
if ($i == 0) shuffle($proxies);
yield $proxies[$i];
$i = ($i + 1) % $len;
}
}
要使用它,您将执行以下操作:
$proxies = array('10.0.0.4', '192.168.0.1', '10.1.0.1');
$i = 0;
foreach (get_proxy($proxies) as $proxy) {
echo "$proxy\n";
$i++;
// stop otherwise infinite loop
if ($i == 9) break;
}
请注意,由于生成器中有一个无限循环,因此外部foreach循环也将是无限的,因此需要一种方法来打破(在这种情况下我使用了一个简单的计数器)。
上述代码的示例输出:
10.1.0.1
10.0.0.4
192.168.0.1
192.168.0.1
10.1.0.1
10.0.0.4
10.1.0.1
192.168.0.1
10.0.0.4
如果生成器不适合您的代码结构,您可以使用带有静态变量的函数在每次调用时返回一个新代理:
$proxies = array('10.0.0.4', '192.168.0.1', '10.1.0.1');
function get_proxy($proxies) {
static $i = 0, $keys;
if (!isset($keys)) $keys = array_keys($proxies);
if ($i == 0) shuffle($keys);
$proxy = $proxies[$keys[$i]];
$i = ($i + 1) % count($keys);
return $proxy;
}
for ($i= 0; $i < 9; $i++) {
echo get_proxy($proxies) . "\n";
}
此代码的示例输出:
10.1.0.1
10.0.0.4
192.168.0.1
192.168.0.1
10.1.0.1
10.0.0.4
10.0.0.4
192.168.0.1
10.1.0.1

TA贡献1807条经验 获得超9个赞
当您在 php 中定义一个数组时,例如
<?php
$alphabet = array(a, b, c)
?>
您试图在数组中查找元素。元素列表始终从 0 开始计数。因此,调用单个元素从 0 开始从左到右计数。
<?php
#a
echo $alphabet[0];
#b
echo $alphabet[1];
#c
echo $alphabet[2];
?>
上面的部分应该产生 abc 的结果,因为没有中断。
For 循环对于遍历整个数组并运行检查、错误分析甚至数学作为示例非常方便。
- 3 回答
- 0 关注
- 133 浏览
添加回答
举报