Php обрезать получить значение символов, которые не находятся в массиве - PullRequest
0 голосов
/ 25 июля 2011

Я использую платформу codeigniter и использую uri-> сегмент (); функция

У меня есть массив:

$brand_array = array("Alpine" => "Alpine", "Atrend" => "Atrend");

if ($this->uri->segment(3) && array_key_exists($this->uri->segment(3),
                                                         $brand_array)) {
$mm = $brand_array[$this->uri->segment(3)];


    echo $mm;

    } 

Я хочу использовать PHP для обрезки любых символов, которые не равны значению массива

, поэтому, если пользователь вводит это в URL example.com/brands/DDDAlpine

Я бы хотел обрезать все эти символы до Alpine

это будет довольно сложная функция?

Нужно ли мне использовать preg_replace и написать свой собственный строковый шаблон?

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Вот решение, которое будет соответствовать точному совпадению, единственной возможности, множеству возможных совпадений и не будет подтверждено совпадений:

$brand_array = array("Alpine" => "Alpine", "Atrend" => "Atrend");

if($this->uri->segment(3))
{
    // Check for exact match
    if(array_key_exists($this->uri->segment(3),$brand_array))
    {
        $brand = $this->uri->segment(3);
    }

    // If no exact match, lets look for the brand somewhere in the uri segment
    else
    {
        $uris = array_keys($brand_array);
        $potential_matches = array();
        foreach($uris as $uri)
        {
            if(stristr($uri,$this->uri->segment(3)))
            {
                $potential_matches[] = $uri;
            }
        }

        // Check length of potential matches. If only 1, lets use it
        if(count($potential_matches) < 1)
        {
            // No match, fail or redirect
            echo 'No match';
        }
        else if(count($potential_matches) == 1)
        {
            $brand = $potential_matches[0];
        }
        else
        {
            // Show all possible matches...
            print_r($potential_matches);
        }
    }
}
0 голосов
/ 25 июля 2011

Я мог бы представить только цикл по массиву и сопоставление регулярных выражений для каждого бренда

<?php
$mm = '';
if ($this->uri->segment(3)) {
  foreach ($brand_array as $brand) {
    if (preg_match('/^.*' . $brand . '.*$/i', $this->uri->segment(3)) {
      $mm = $brand;
      break;
    }
  }
}
echo $mm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...