A/B Test Result Summarizer
Computes variant counts, conversion rates, lift, and simple confidence flags.
Function signature
ogSummarizeAbTestResults(variants = array(), options = array())
Categories
- Developer Utilities
Parameters
variantsVariant rows with name, visitors, and conversions keys.optionsOptions: baseline variant name. Recognized keys: `baseline`.Return value
Short public-safe status message.
- variants
- certainty_note
Compatibility
Existing function name and call order preserved; metadata signature corrected to source.
Minimum PHP version: 7.4
Security notes
Validate request method, identity, permissions, policy arrays, URLs, signatures, and caller-owned allowlists before use; keep secrets and internal paths out of public output.
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Summarizes A/B test variants with conversion rate and lift against baseline.
*
* The helper reports simple directional metrics only. It does not claim
* statistical certainty or replace a full experimentation engine.
*
* @param array $variants Variant rows with name, visitors, and conversions keys.
* @param array $options Options: baseline variant name.
* @return array A/B test summary.
*/
function ogSummarizeAbTestResults($variants = array(), $options = array()) {
$result = array(
'success' => false,
'message' => '',
'data' => array()
);
if (!is_array($variants)) {
$result['message'] = 'Variants must be an array.';
return $result;
}
if (!is_array($options)) {
$options = array();
}
$summary = array();
$baseline_name = '';
if (!empty($options['baseline'])) {
$baseline_name = (string)$options['baseline'];
}
$baseline_rate = null;
foreach ($variants as $variant) {
if (!is_array($variant)) {
continue;
}
$name = 'variant-' . (count($summary) + 1);
if (!empty($variant['name'])) {
$name = (string)$variant['name'];
}
$visitors = 0;
if (!empty($variant['visitors'])) {
$visitors = (int)$variant['visitors'];
}
$conversions = 0;
if (!empty($variant['conversions'])) {
$conversions = (int)$variant['conversions'];
}
$rate = 0;
if ($visitors > 0) {
$rate = ($conversions / $visitors) * 100;
}
if ($baseline_rate === null) {
$baseline_rate = $rate;
if (empty($baseline_name)) {
$baseline_name = $name;
}
}
if ($name == $baseline_name) {
$baseline_rate = $rate;
}
$summary[$name] = array(
'visitors' => $visitors,
'conversions' => $conversions,
'conversion_rate_percent' => $rate,
'lift_percent' => 0
);
}
foreach ($summary as $name => $row) {
$lift = 0;
if ($baseline_rate !== null && $baseline_rate != 0) {
$lift = (($row['conversion_rate_percent'] - $baseline_rate) / abs($baseline_rate)) * 100;
}
$summary[$name]['lift_percent'] = $lift;
$summary[$name]['is_baseline'] = ($name == $baseline_name);
}
$result['success'] = true;
$result['message'] = 'A/B test summary built.';
$result['data'] = array(
'baseline' => $baseline_name,
'variants' => $summary,
'certainty_note' => 'Directional summary only; no statistical certainty is claimed.'
);
return $result;
}