【问题标题】:Get a single random key from a php array while inside a foreach loop在 foreach 循环中从 php 数组中获取单个随机键
【发布时间】:2017-02-10 17:49:08
【问题描述】:

我有一个使用简单的 PHP foreach 循环生成的图片库,我想在图片库中插入广告。

广告数组如下所示:

$links = array(
    'http://a.com' => 'a.jpg',
    'http://b.com' => 'b.jpg',
    'http://c.com' => 'c.jpg',
);

现在,我需要在每 x 次迭代后仍在 foreach 循环中的同时从该数组中取出 link + image一对

所以我可能应该在这里做:

if($count % 5 == 0){
 //get random item
} 
$count++;

$count = 0; 位于 foreach 循环之外的位置。

我只是还没想出一种方法,在foreach 循环内从我的链接数组中随机获取仅一个项。

基本上最终结果应该是这样的:

<img src="path"></img>
<img src="path"></img>
<img src="path"></img>
<img src="path"></img>
<img src="path"></img>

<a href="link">
 <img src="picture"></img>
</a>

<img src="path"></img>
<img src="path"></img>
<img src="path"></img>
<img src="path"></img>
<img src="path"></img>

<a href="link">
 <img src="picture"></img>
</a>

等等

img's 集合的中间链接 是从我的数组中随机选择的一个,img's 集合是由我的foreach 循环生成的,就像正常一样。

到目前为止,我只能将整个数组作为链接放在每 5 个 img's 之后,这不是我需要的。这个想法是通过照片库“展开”。

我什至不确定我是否已经工作了太久或者不可能......或者我接近它错了吗?

注意:我不在乎广告是否重复。

【问题讨论】:

  • 所以你只想要一个但你不在乎它们是否重复?我不太确定你想要的输出。你能澄清一下吗?

标签: php arrays loops foreach while-loop


【解决方案1】:

在开始循环之前,随机播放广告,确保不会破坏密钥:

$keys = array_keys($links);
shuffle($keys);
foreach($keys as $key) {
     $links_shuffled[$key] = $links[$key];
}

然后在循环中你有:

if($count % 5 == 0){
    //get random item
    $item = $links_shuffled[($count / 5) % count($links)];
    // output link:
    // ...
}

【讨论】:

    【解决方案2】:

    使用array_rand 每第 5 次迭代随机选择一个 $link 元素:

    $count = 0;
    foreach ($images as $image) {
        if($count % 5 == 0){
            $addUrl = array_rand($links);
            $addImage = $links[$addUrl]
        } 
        $count++;
    }
    

    【讨论】:

    • 这个只获取图片不获取url?
    • 真的。我刚刚编辑了我的答案。 array_rand 返回一个key,key就是你的url吧?
    【解决方案3】:

    编辑:在重新阅读您的问题(再次)之后,您的想法似乎应该可行。您能否展示您的完整代码而不是一小部分代码,以便我们确定实际出了什么问题?


    注意:下面的所有内容都是我的原始答案,这可能不是 OP 实际要求的。

    不完全确定这是否是您正在寻找的,因为问题并不完全清楚。但我有一个猜测,你可以做这样的事情......

    $links = shuffle($links);
    if($count % 5 == 0){
     //get random item
     $output = array_pop($links);
    } 
    $count++;
    

    本质上这是做什么的,它将随机化数组的顺序,然后每 5 个元素(或您在 if 语句中输入的任何值),将 $output 设置为数组的最后一个元素的值,然后删除数组的最后一个元素,因此不能再次使用。这样,当您下一次点击该 if 语句并且它的计算结果为 true 时,您将获取数组的最后一个元素,该元素不能是重复值。

    如果我误解了你想要达到的目标,请解释清楚,我会很乐意相应地调整我的答案。

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2019-04-29
      • 2013-04-28
      • 2010-09-08
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      相关资源
      最近更新 更多