在PHP中以随机索引将数组合并到已建立的数组中
我正在建立一个图像库,并希望在随机点扔一些宣传横幅,以促进某些提供给用户。假设已从数据库查询中筛选出以下两个数组: 媒体图像阵列:在PHP中以随机索引将数组合并到已建立的数组中,php,arrays,multidimensional-array,array-merge,array-splice,Php,Arrays,Multidimensional Array,Array Merge,Array Splice,我正在建立一个图像库,并希望在随机点扔一些宣传横幅,以促进某些提供给用户。假设已从数据库查询中筛选出以下两个数组: 媒体图像阵列: Array ( [0] => Array ( [insertDate] => 2014-11-10 11:22:58 [keyword] => standard [mediaClass] => image
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
)
)
促销图像阵列:
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
)
)
如何将促销图像以随机索引插入到媒体图像数组中,同时按媒体图像的插入日期保持排序顺序
i、 e将促销横幅添加到图像的时间线中。这就是我要做的:
<?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);
如果你没有大量的图像(比如说,最多100个),请随意“手工”创建数组。首先,您应该创建一个数组,其中包含促销项目的位置。您知道内容数组中的项目数,促销数组中的项目数;它们的总和将是最终数组的大小。想出一些聪明的数学,计算促销项目的位置(例如,不要把促销放在第一位和最后一位,不要把两个促销项目放在相邻的位置,如果促销项目比内容项目多,可能你必须unset()
一些促销项目)
如果你有促销职位,你可以在内容项目上走一走,将它们复制到最终的数组中。在复制内容之前,您应该检查当前位置是否为促销项目保留,如果是,则应首先复制促销项目。瞧,你有一个最终的项目列表,促销项目交错
由于Autovification(您不必为位置较深的元素创建父节点),PHP对于此类任务是一个很好的选择。编程,尤其是网页,包括:
将一些数据项挖掘到数组中(来自SQL、JSON、API调用)
创建具有不同索引的最终数组(可能发生合并/求和项)
排序、筛选、查找其他字段的其他数组
显示最终数组
类似的任务出现在求职面试问题中(通过数组扫描,然后计数/求和/合并某物)。也许可以使用问题中标记的as。那么问题出在哪里呢?谢谢Mark,我不知道如何使用array_splice分散Promo,这就是为什么我要求一些输入Hank Jonathan,这种方法为我解决了问题,我使用array_值在过滤后重置两个数组的索引以分离它们