在foreach循环中获取来自php数组的单个随机密钥

时间:2016-10-02 18:55:05

标签: php arrays loops foreach while-loop

我有一个使用简单的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中的链接是从我的数组中随机选择的那个<{1}}由{{1}生成的img's像正常一样循环。

到目前为止,我只能在每5 foreach之后将整个数组作为链接,这不是我需要的。我们的想法是&#34;展开&#34;通过照片库。

如果我已经工作太久或者不可能,我甚至不确定......或者我接近错了?

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

3 个答案:

答案 0 :(得分:0)

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

$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:
    // ...
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

编辑:重新阅读您的问题(再次)后,您的想法似乎应该有效。你能展示你的完整代码而不仅仅是它的一小部分,那么我们可以确定实际出现的问题吗?

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

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

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

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

如果我误解了你想要实现的目标,那么请解释清楚,我会愉快地相应地调整我的答案。