本文整理汇总了PHP中_adSelectDiscardNonMatchingAds函数的典型用法代码示例。如果您正苦于以下问题:PHP _adSelectDiscardNonMatchingAds函数的具体用法?PHP _adSelectDiscardNonMatchingAds怎么用?PHP _adSelectDiscardNonMatchingAds使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了_adSelectDiscardNonMatchingAds函数的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _adSelect
function _adSelect(&$aLinkedAds, $context, $source, $richMedia, $adArrayVar = 'ads', $cp = null)
{
// If there are no linked ads, we can return
if (!is_array($aLinkedAds)) {
return;
}
if (!is_null($cp) && isset($aLinkedAds[$adArrayVar][$cp])) {
$aAds = $aLinkedAds[$adArrayVar][$cp];
} elseif (isset($aLinkedAds[$adArrayVar])) {
$aAds = $aLinkedAds[$adArrayVar];
} else {
$aAds = array();
}
// If there are no linked ads of the specified type, we can return
if (count($aAds) == 0) {
return;
}
// Build preconditions
$aContext = _adSelectBuildContextArray($aAds, $adArrayVar, $context);
// New delivery algorithm: discard all invalid ads before iterating over them
$aAds = _adSelectDiscardNonMatchingAds($aAds, $aContext, $source, $richMedia);
// If there are no linked ads of the specified type, we can return
if (count($aAds) == 0) {
return;
}
if (!is_null($cp)) {
// Scale priorities
$total_priority = 0;
foreach ($aAds as $ad) {
$total_priority += $ad['priority'] * $ad['priority_factor'];
}
if ($total_priority) {
if ($adArrayVar == 'eAds') {
foreach ($aAds as $key => $ad) {
$aAds[$key]['priority'] = $ad['priority'] * $ad['priority_factor'] / $total_priority;
}
} else {
foreach ($aAds as $key => $ad) {
$aAds[$key]['priority'] = $ad['priority'] * $ad['priority_factor'] * $aLinkedAds['priority'][$adArrayVar][$cp] / $total_priority;
}
}
}
} else {
// Rescale priorities by weights
_setPriorityFromWeights($aAds);
}
// Seed the random number generator
global $n;
mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime()));
$conf = $GLOBALS['_MAX']['CONF'];
// Pick a float random number between 0 and 1, inclusive.
$ranweight = mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'];
// Perform selection of an ad, based on the random number
$low = 0;
$high = 0;
foreach ($aAds as $aLinkedAd) {
if (!empty($aLinkedAd['priority'])) {
$low = $high;
$high += $aLinkedAd['priority'];
if ($high > $ranweight && $low <= $ranweight) {
return $aLinkedAd;
}
}
}
return;
}
示例2: _adSelect
function _adSelect(&$aLinkedAdInfos, $context, $source, $richMedia, $companion, $adArrayVar = 'ads', $cp = null)
{
if (!is_array($aLinkedAdInfos)) {
return;
}
if (!is_null($cp) && isset($aLinkedAdInfos[$adArrayVar][$cp])) {
$aAds =& $aLinkedAdInfos[$adArrayVar][$cp];
} elseif (is_null($cp) && isset($aLinkedAdInfos[$adArrayVar])) {
$aAds =& $aLinkedAdInfos[$adArrayVar];
} else {
$aAds = array();
}
if (count($aAds) == 0) {
return;
}
$aContext = _adSelectBuildContextArray($aAds, $adArrayVar, $context, $companion);
_adSelectDiscardNonMatchingAds($aAds, $aContext, $source, $richMedia);
if (count($aAds) == 0) {
return;
}
global $n;
mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime()));
$conf = $GLOBALS['_MAX']['CONF'];
if ($adArrayVar == 'eAds') {
if (!empty($conf['delivery']['ecpmSelectionRate'])) {
$selection_rate = floatval($conf['delivery']['ecpmSelectionRate']);
if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) {
$max_ecpm = 0;
$top_ecpms = array();
foreach ($aAds as $key => $ad) {
if ($ad['ecpm'] < $max_ecpm) {
continue;
} elseif ($ad['ecpm'] > $max_ecpm) {
$top_ecpms = array();
$max_ecpm = $ad['ecpm'];
}
$top_ecpms[$key] = 1;
}
if ($max_ecpm <= 0) {
$GLOBALS['_MAX']['ECPM_CONTROL'] = 1;
$total_priority = _setPriorityFromWeights($aAds);
} else {
$GLOBALS['_MAX']['ECPM_SELECTION'] = 1;
$total_priority = count($top_ecpms);
foreach ($aAds as $key => $ad) {
if (!empty($top_ecpms[$key])) {
$aAds[$key]['priority'] = 1 / $total_priority;
} else {
$aAds[$key]['priority'] = 0;
}
}
}
} else {
$GLOBALS['_MAX']['ECPM_CONTROL'] = 1;
$total_priority = _setPriorityFromWeights($aAds);
}
}
} else {
if (isset($cp)) {
$used_priority = 0;
for ($i = 10; $i > $cp; $i--) {
if (isset($aLinkedAdInfos['priority_used'][$adArrayVar][$i])) {
$used_priority += $aLinkedAdInfos['priority_used'][$adArrayVar][$i];
}
}
if ($used_priority >= 1) {
return $GLOBALS['OX_adSelect_SkipOtherPriorityLevels'];
}
$remaining_priority = 1 - $used_priority;
$total_priority_orig = 0;
foreach ($aAds as $ad) {
$total_priority_orig += $ad['priority'] * $ad['priority_factor'];
}
$aLinkedAdInfos['priority_used'][$adArrayVar][$i] = $total_priority_orig;
if ($total_priority_orig <= 0) {
return;
}
if ($total_priority_orig > $remaining_priority || $companion) {
$scaling_denom = $total_priority_orig;
if ($cp >= PRI_ECPM_FROM && $cp <= PRI_ECPM_TO && !empty($conf['delivery']['ecpmSelectionRate'])) {
$selection_rate = floatval($conf['delivery']['ecpmSelectionRate']);
if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) {
$GLOBALS['_MAX']['ECPM_SELECTION'] = 1;
foreach ($aAds as $key => $ad) {
$ecpms[] = $ad['ecpm'];
$adids[] = $key;
}
array_multisort($ecpms, SORT_DESC, $adids);
$p_avail = $remaining_priority;
$ad_count = count($aAds);
$i = 0;
while ($i < $ad_count) {
$l = $i;
while ($l < $ad_count - 1 && $ecpms[$l + 1] == $ecpms[$i]) {
$l++;
}
$p_needed = 0;
for ($a_idx = $i; $a_idx <= $l; $a_idx++) {
$id = $adids[$a_idx];
$p_needed += $aAds[$id]['priority'] * $aAds[$id]['priority_factor'];
//.........这里部分代码省略.........
示例3: _adSelect
/**
* This function takes a group of ads, and selects the ad to show
*
* @param array $aLinkedAds The array of possible ads for this search criteria
* @param array $context The context of this ad selection
* - used for companion positioning
* - and excluding banner/campaigns from this ad-call
* @param string $source The "source" parameter passed into the adcall
* @param boolean $richMedia Does this invocation method allow for serving 3rd party/html ads
* @param boolean $companion Should ad selection only return companion ads?
* @param string $adArrayVar The collection of ads in $aLinkedAds to select the ad from
* @param integer $cp
*
* @return array|void The ad-array for the selected ad or void if no ad selected
*/
function _adSelect(&$aLinkedAdInfos, $context, $source, $richMedia, $companion, $adArrayVar = 'ads', $cp = null)
{
// If there are no linked ads, we can return
if (!is_array($aLinkedAdInfos)) {
return;
}
if (!is_null($cp) && isset($aLinkedAdInfos[$adArrayVar][$cp])) {
$aAds =& $aLinkedAdInfos[$adArrayVar][$cp];
} elseif (is_null($cp) && isset($aLinkedAdInfos[$adArrayVar])) {
$aAds =& $aLinkedAdInfos[$adArrayVar];
} else {
$aAds = array();
}
// If there are no linked ads of the specified type, we can return
if (count($aAds) == 0) {
return;
}
// Build preconditions
$aContext = _adSelectBuildContextArray($aAds, $adArrayVar, $context, $companion);
// New delivery algorithm: discard all invalid ads before iterating over them
// $aAds passed by ref here
_adSelectDiscardNonMatchingAds($aAds, $aContext, $source, $richMedia);
// If there are no linked ads of the specified type, we can return
if (count($aAds) == 0) {
return;
}
// Seed the random number generator
global $n;
mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime()));
$conf = $GLOBALS['_MAX']['CONF'];
if ($adArrayVar == 'eAds') {
if (!empty($conf['delivery']['ecpmSelectionRate'])) {
// we should still allow there to be some portion of control
// responses in order to avoid starving out any ad
$selection_rate = floatval($conf['delivery']['ecpmSelectionRate']);
if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) {
// Find the highest value eCPM ad(s) an naively select
// from that set.
$max_ecpm = 0;
$top_ecpms = array();
// build an eCPM sorted index for the ads
foreach ($aAds as $key => $ad) {
if ($ad['ecpm'] < $max_ecpm) {
continue;
} elseif ($ad['ecpm'] > $max_ecpm) {
$top_ecpms = array();
$max_ecpm = $ad['ecpm'];
}
$top_ecpms[$key] = 1;
}
// fallback to weighted prioritization if ecpm weighting zeros out
if ($max_ecpm <= 0) {
$GLOBALS['_MAX']['ECPM_CONTROL'] = 1;
$total_priority = _setPriorityFromWeights($aAds);
} else {
// zero out the priority for all except ads with the
// highest eCPM value
$GLOBALS['_MAX']['ECPM_SELECTION'] = 1;
$total_priority = count($top_ecpms);
foreach ($aAds as $key => $ad) {
if (!empty($top_ecpms[$key])) {
$aAds[$key]['priority'] = 1 / $total_priority;
} else {
$aAds[$key]['priority'] = 0;
}
}
}
} else {
$GLOBALS['_MAX']['ECPM_CONTROL'] = 1;
$total_priority = _setPriorityFromWeights($aAds);
}
}
} else {
if (isset($cp)) {
// How much of the priority space have we already covered?
$used_priority = 0;
for ($i = 10; $i > $cp; $i--) {
if (isset($aLinkedAdInfos['priority_used'][$adArrayVar][$i])) {
$used_priority += $aLinkedAdInfos['priority_used'][$adArrayVar][$i];
}
}
// sanity check, in case there is no space left.
if ($used_priority >= 1) {
return $GLOBALS['OX_adSelect_SkipOtherPriorityLevels'];
}
//.........这里部分代码省略.........