首页 > 解决方案 > 数组中不区分大小写

问题描述

我们在 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

标签: php

解决方案


您必须将数组值转换为较低,并将输入的值也转换为较低,之后您可以轻松检查。

例如,在此代码段中:

strpos($this->session->data['shipping_address']['postcode'], $code)

你必须这样做:

strpos(strtolower($this->session->data['shipping_address']['postcode']), strtolower($code))

推荐阅读