php - 数组中不区分大小写
问题描述
我们在 opencart 中有以下代码,它指定了不接受免费邮资的邮政编码:
foreach ($results as $result) {
if ($this->config->get($result['code'] . '_status')) {
$noFreeDelivery = false;
if ($result['code'] == 'free') {
$disallowedFreePostcodes = array(
'IV', 'BT', 'HS', 'KA27', 'KA28', 'KW', 'PA20', 'PA21', 'PA22', 'PA23', 'PA24', 'PA25', 'PA26', 'PA27', 'PA28', 'PA29', 'PA30', 'PA31', 'PA32', 'PA33', 'PA34', 'PA35', 'PA36', 'PA37', 'PA38', 'PA39', 'PA40', 'PA41', 'PA42', 'PA43', 'PA44', 'PA45', 'PA46', 'PA47', 'PA48', 'PA49', 'PA60', 'PA61', 'PA62', 'PA63', 'PA64', 'PA65', 'PA66', 'PA67', 'PA68', 'PA69', 'PA70', 'PA71', 'PA72', 'PA73', 'PA74', 'PA75', 'PA76', 'PA77', 'PA78', 'PH17', 'PH18', 'PH19', 'PH20', 'PH21', 'PH22', 'PH23', 'PH24', 'PH25', 'PH26', 'PH30', 'PH31', 'PH32', 'PH33', 'PH34', 'PH35', 'PH36', 'PH37', 'PH38', 'PH39', 'PH40', 'PH41', 'PH42', 'PH43', 'PH44', 'PH49', 'PH50', 'ZE', 'BT', 'IM', 'TR21', 'TR22', 'TR23', 'TR24', 'TR25', 'AB31', 'AB33', 'AB34', 'AB35', 'AB36', 'AB37', 'AB38', 'AB45', 'AB52', 'AB53', 'AB54', 'AB55', 'AB56', 'FK', 'Ph33'
);
foreach ($disallowedFreePostcodes as $postcode) {
$range = explode('-', $postcode);
if (array_key_exists(1, $range)) {
$start = str_split($range[0], 2);
foreach (range($start[1], $range[1]) as $postcodeSuffix) {
$code = $start[0].$postcodeSuffix;
if (strpos($this->session->data['shipping_address']['postcode'], $code) === 0) {
$noFreeDelivery = true;
break;
}
}
continue;
}
if (strpos($this->session->data['shipping_address']['postcode'], $range[0]) === 0) {
$noFreeDelivery = true;
break;
}
}
}
}
我面临的问题是,例如,如果有人输入 pa22(小写)或 Pa22(混合大小写),他们仍将获得免费送货。有人可以建议一种方法,让我无需将所有可能的输入都添加到数组中即可获得折扣案例的代码吗?
TIA
解决方案
您必须将数组值转换为较低,并将输入的值也转换为较低,之后您可以轻松检查。
例如,在此代码段中:
strpos($this->session->data['shipping_address']['postcode'], $code)
你必须这样做:
strpos(strtolower($this->session->data['shipping_address']['postcode']), strtolower($code))
推荐阅读
- c++ - C++:类构造的 Undef Ref 错误
- vue.js - 每次挂载 Vue 组件时,Jest 单元测试都会失败
- pdf - BlueBeam 通过脚本或模板设置状态颜色?
- python - Python Pandas IF AND 语句
- javascript - 尽管范围请求支持,但视频未在 Safari 中播放
- google-sheets - Google 表格:从一列添加 URL 并将其包装在文本中(自动)
- azure-active-directory - 带有 Azure 应用程序代理的 ADFS 上的 Azure MFA
- python - 在图形模式下训练时保存 tensorflow 指标的输出
- notion-api - 有没有办法判断用户是否正在查看页面?
- sql - Redshift - 将数据插入带有条件的临时表中:列 doc_id 应该是唯一的,而不是 null