我有1个多维数组:
$adverts = array(array('text'=>'test', 'location' => 'location1'), array('text'=>'test', 'location' => 'location2'), array('text'=>'test', 'location' => 'location1'))
如您所见,该多维数组中的两个数组包含location
元素的相同文本。
如何检测到这一点,并在foreach循环中随机选择其中一个,如下所示:
foreach ($adverts as $advert)
{
if ($hookName == $advert['advert_location'] && XenForo_Helper_Criteria::userMatchesCriteria($advert['user_criteria']))
{
$contents .= $advert['advert_code'];
}
}
(我知道数组不匹配)
在该foreach循环中,正在根据预定义值检查多维数组中每个数组的location
。如果多维数组中的多个数组具有相同的location
,我只想使用其中一个 - 换句话说,内容不会多次针对同一位置进行修改。
但是,它应该使用每个匹配值的随机数组。
这是可能的,你明白了吗?它将如何完成?
答案 0 :(得分:3)
只需将它们分配到位置,然后在每次循环时随机选择
$group = array_reduce($adverts, function ($a, $b) {
$a[$b['location']][] = $b;
return $a;
});
$contents = array();
foreach($group as $adverts) {
$contents[] = $adverts[mt_rand(0, count($adverts) - 1)];
}
print_r($contents);
答案 1 :(得分:2)
您可以使用array_filter仅过滤掉符合条件的元素,然后使用数组rand选择随机元素。
$array = array_filter($array, function($el) use $location{
return $el["location"] == $location;
});
if (count($array) > 1){
$selected = $array(array_rand($array));
} elseif (count($array) == 0){
$selected = $array[0];
} else {
$selected = null;
}
注意这需要php 5.3