我正在建立一个图片库,并想把一些广告横幅随机点,以推广某些优惠给用户。考虑到以下两个数组已从数据库查询中筛选出来:
媒体图像阵列:
Array
(
[0] => Array
(
[insertDate] => 2014-11-10 11:22:58
[keyword] => standard
[mediaClass] => image
[mediaURL] => http://image1.jpg
[promoURL] =>
)
[2] => Array
(
[insertDate] => 2014-11-10 11:23:18
[keyword] => standard
[mediaClass] => image
[mediaURL] => http://image3.jpg
[promoURL] =>
)
[3] => Array
(
[insertDate] => 2014-11-10 11:23:28
[keyword] => standard
[mediaClass] => image
[mediaURL] => http://image4.jpg
[promoURL] =>
)
[5] => Array
(
[insertDate] => 2014-11-10 11:23:48
[keyword] => standard
[mediaClass] => image
[mediaURL] => http://image6.jpg
[promoURL] =>
)
)宣传片图像阵列:
Array
(
[1] => Array
(
[insertDate] => 2014-11-10 11:23:08
[keyword] => promo
[mediaClass] => image
[mediaURL] => http://image2.jpg
[promoURL] => http://www.google.com
)
[4] => Array
(
[insertDate] => 2014-11-10 11:23:38
[keyword] => promo
[mediaClass] => image
[mediaURL] => http://image5.jpg
[promoURL] => http://www.google.com
)
)如何将promo图像以随机索引的形式插入媒体图像数组中,同时保持insertDate对媒体图像的排序顺序?
也就是说,在图像的时间线中添加宣传横幅。
发布于 2014-11-10 23:11:32
这就是我要做的:
<?php
$promo = Array (
Array ('insertDate' => '2014-11-10 11:23:08', 'keyword' => 'promo', 'mediaClass' => 'image', 'mediaURL' => 'http://image2.jpg', 'promoURL' => 'http://www.google.com'),
Array ('insertDate' => '2014-11-10 11:23:38', 'keyword' => 'promo', 'mediaClass' => 'image', 'mediaURL' => 'http://image5.jpg', 'promoURL' => 'http://www.google.com')
);
$media = Array (
Array ('insertDate' => '2014-11-10 11:22:58', 'keyword' => 'standard', 'mediaClass' => 'image', 'mediaURL' => 'http://image1.jpg', 'promoURL' => '', ),
Array ('insertDate' => '2014-11-10 11:23:18', 'keyword' => 'standard', 'mediaClass' => 'image', 'mediaURL' => 'http://image3.jpg', 'promoURL' => '', ),
Array ('insertDate' => '2014-11-10 11:23:28', 'keyword' => 'standard', 'mediaClass' => 'image', 'mediaURL' => 'http://image4.jpg', 'promoURL' => '', ),
Array ('insertDate' => '2014-11-10 11:23:48', 'keyword' => 'standard', 'mediaClass' => 'image', 'mediaURL' => 'http://image6.jpg', 'promoURL' => '', )
);
//sort the promo in random order. This ensures they go into media in random order
shuffle($promo);
//get random keys to insert the promo image before
$randKeys = array_rand($media, count($promo));
//sort by the random key value in reverse. By inserting in reverse order,
//we won't have an issue with needing to increment keys to prevent two promo
//images ending up next to each other. Also, this is why we shuffle the promo
//array above, so the promo images go in random order because this is no longer random.
rsort($randKeys);
//loop over the random keys and insert the next promo image before each key
foreach($randKeys as $key){
//get the first promo image and remove it
$promoImage = array_shift($promo);
//splice the promo image into the media array
array_splice($media, $key, 0, array($promoImage));
}
//display
print_r($media);唯一要注意的是,我的媒体和promo数组都是基于数字索引的,从零开始,这是数组的默认设置,而不像您发布的从媒体数组中删除它们的1和4键的数组。
发布于 2014-11-10 23:19:46
如果你没有成堆的图像(比如说,最多)。,可以“手工”创建数组。首先,您应该创建一个数组,它包含promo项的位置。您知道内容数组中的项目数,以及promo数组中的项目数;它们的之和将是最终数组的大小。找出一些聪明的数学,计算出广告项目的位置(例如,不要把广告放在第一位和最后一位,不要把两个广告项目放在相邻位置,如果有比内容项目更多的广告项目,也许你必须要unset()一些广告项目)。
如果您有宣传片的位置,您可以在内容项上行走,将它们复制到最后的数组中。在复制内容之前,您应该检查当前位置是否保留给一个宣传品,如果是,则应先复制宣传品。瞧,你有最后一个项目列表,广告项目交织在一起。
PHP对于这类任务来说是一个很好的选择,这要归功于自动生动化(您不必为一个深层次的元素创建父节点)。编程,特别是网页是:
类似的任务出现在面试问题中(扫描数组,计数/和/合并某物)。
https://stackoverflow.com/questions/26854492
复制相似问题