为了账号安全,请及时绑定邮箱和手机立即绑定

如何从数组中输出不同的值

如何从数组中输出不同的值

PHP
largeQ 2022-06-11 10:31:38
我的代码有问题。我想做的是在数组被调用时从数组中删除一个项目,这意味着我希望每个输出都不同。我想用它来旋转代理,阵列中有超过 150 个代理。这是我的代码示例。for ( $i = 1; $i < 2; $i++ ){  // If the array_history is empty, re-populate it.  if (empty($array_history))    $array_history = $array;  // Select a random key.  $key = array_rand($array_history, 1);  // Save the record in $selected.  $selected = $array_history[$key];  // Remove the key/pair from the array.  unset($array_history[$key]);  // Echo the selected value.  echo $selected; }我该怎么做,或者 for 循环不适合这个?提前致谢。
查看完整描述

3 回答

?
PIPIONE

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);

}


?>


查看完整回答
反对 回复 2022-06-11
?
鸿蒙传说

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


查看完整回答
反对 回复 2022-06-11
?
函数式编程

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 循环对于遍历整个数组并运行检查、错误分析甚至数学作为示例非常方便。


查看完整回答
反对 回复 2022-06-11
  • 3 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号