public function lowest_rate($carriers = array(), $services = array())
{
$lowest_rate = false;
$carriers_include = array();
$carriers_exclude = array();
$services_include = array();
$services_exclude = array();
if (!is_array($carriers)) {
$carriers = explode(',', $carriers);
}
for ($a = 0, $b = count($carriers); $a < $b; $a++) {
$carriers[$a] = trim(strtolower($carriers[$a]));
if (substr($carriers[$a], 0, 1) == '!') {
$carriers_exclude[] = substr($carriers[$a], 1);
} else {
$carriers_include[] = $carriers[$a];
}
}
if (!is_array($services)) {
$services = explode(',', $services);
}
for ($c = 0, $d = count($services); $c < $d; $c++) {
$services[$c] = trim(strtolower($services[$c]));
if (substr($services[$c], 0, 1) == '!') {
$services_exclude[] = substr($services[$c], 1);
} else {
$services_include[] = $services[$c];
}
}
for ($i = 0, $k = count($this->rates); $i < $k; $i++) {
$rate_carrier = strtolower($this->rates[$i]->carrier);
if (!empty($carriers_include[0]) && !in_array($rate_carrier, $carriers_include)) {
continue;
}
if (!empty($carriers_exclude[0]) && in_array($rate_carrier, $carriers_exclude)) {
continue;
}
$rate_service = strtolower($this->rates[$i]->service);
if (!empty($services_include[0]) && !in_array($rate_service, $services_include)) {
continue;
}
if (!empty($services_exclude[0]) && in_array($rate_service, $services_exclude)) {
continue;
}
if (!$lowest_rate || floatval($this->rates[$i]->rate) < floatval($lowest_rate->rate)) {
$lowest_rate = clone $this->rates[$i];
}
}
if ($lowest_rate == false) {
throw new Error('No rates found.');
}
return $lowest_rate;
}