2015-07-29 2 views
3

Мне нужно сделать сравнение различных функций мобильного устройства (около 30 функций). Но сравнение должно основываться на таких значениях, как «800 мАч, литий-ионная батарея».Лучший способ сравнить две строки

Предположим, что мобильный 'А' имеет размер батареи '800 мАч, литий-ионная аккумуляторная батарея'

и второй мобильный 'B' имеет размер батареи 'литий-ионный аккумулятор, 400 мАч'

затем A лучше, чем B.

Так как я могу сравнить 800 мАч и 400 мАч, игнорируя остальные «литий-ионная батарея»,

почти во всех 30 особенностей, которые я должен сделать этот вид сравнения. Как я должен сделать сравнение на 4Mb против 1GB.

В настоящее время я пытаюсь использовать функцию типа списка ($ a, $ b) = explode(). Есть ли лучшее решение.

+1

Извлечь количество и сравнить. –

+0

Похоже, вам нужно нормализовать обе строки (вывести номер/все и поместить в те же единицы) и сравнить их по принципу «по отдельности». – AD7six

ответ

5

Это будет зависеть от струн. Учитывая два, которые вы предоставили в качестве ограниченного образца, вы можете игнорировать нечисловые символы (также выходящие в периоды), а затем сравнивать числа. Что-то вроде этого:

$number_a = preg_replace('/[^0-9.]/', '', $string_a; 
$number_b = preg_replace('/[^0-9.]/', '', $string_b; 

Затем сравните их числа:

if ($number_a > $number_b) { 
    ... 
} 

Это работает так долго, как вы всегда сравнивая те же единицы измерения, такие, как вы пример. Но если единицы отличаются друг от друга, например, «800 мАч, литий-ионная батарея» против «Li-ion Battery, .4 AH», тогда этого не произойдет. Вам нужно будет добавить еще немного логики для анализа и интерпретации единиц.

+0

Спасибо, Nick Coons ........... –

3

Как насчет извлечения числа из вашей строки и сравнивая их

$A = filter_var('800 mAH, Li-ion Battery', FILTER_SANITIZE_NUMBER_INT); 

$B = filter_var('Li-ion Battery, 400 mAH', FILTER_SANITIZE_NUMBER_INT); 

if($A > $B){ 
// A is better 
} 
+3

Это зависит от единиц, которые одинаковы в обоих сравнениях. – AD7six

+0

yup u are right .... – Umair