2013-09-17 6 views
1

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

$str = 'asus company'; 
$brands = "asus|lenovo|dell"; 

Чем я хотел бы сравнить 2 строковых переменных и получить строку соответствия суб. Желаемый выход будет 'asus'.

Я знаю, что я могу использовать функцию от php, но этот возвращает только логическое значение. Мне нужна строка.

+0

Будет ли ваша строка всегда в одном формате? Если это так, я предлагаю вам проанализировать строку, используя '' и '|', и сохранить ее как массив. После этого вы можете легко использовать 'in_array()' для проверки соответствия. – Maz

+0

См. Ответ Яри для быстрого и простого способа, если у вас всегда есть одинаковые '|' разделенный список брендов. Если вы хотите найти соответствующие шаблоны в строках в целом, вы можете использовать дерево суффиксов. – Christoph

+0

Да, бренды будут иметь одинаковый формат. Я собираюсь попробовать с чаем Джариса. – fefe

ответ

4

Предполагая $str отделяется пробелом и $brands по трубе, это должно работать:

<?php 

$str = 'asus company'; 
$brands = "asus|lenovo|dell"; 

$array_str = explode(' ', $str); 
$array_brands = explode('|', $brands); 

var_dump(
    array_intersect($array_str, $array_brands) 
); 

Выход

array(1) { 
    [0]=> 
    string(4) "asus" 
} 
1

preg_match будет выполнять работу за вас. Просто помните, что ваше регулярное выражение должно быть правильным, что означает, что в вашем случае достаточно простого ограничителя |.

$str = 'asus company'; 
$brands = "asus|lenovo|dell"; 

preg_match("/($brands)/", $str, $matches); 

echo $matches[1] ; 

$matches содержит ключевые слова. $matches[0] имеет полную строку и $matches[1] имеет первое вхождение и так далее.

0

вы можете использовать как ниже

$array1 = explode(" ",$str); 
$array2 = explode("|",$brands); 
$result = array_intersect($array1, $array2); 
print_r($result); 
1

Это то, что я сделаю:

$str = 'asus company'; 
$brands = "asus|lenovo|dell"; 

//Finding every single word (separated by spaces or symbols) and putting them into $words array; 
preg_match_all('/\b\w+\b/', $str, $words); 

//Setting up the REGEX pattern; 
$pattern = implode('|', $words[0]); 
$pattern = "/$pattern/i"; 

//Converting brands to an array to search with 
$array = explode('|', $brands); 

//Searching 
$matches = preg_grep($pattern, $array); 

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

С помощью preg_grep вы избежите проблем с верхним/нижним регистром.


Вы также можете array_intersect($words, $array) там ответили @Znarkus, вместо создания рисунка и preg_grep(), но убедитесь, что вы strtolower()$brands и $str перед преобразованием в массив, я не уверен, если array_intersect() является случай чувствительны.

Смежные вопросы