|
|
|
| Добрый день!
Задача следующая имеется 3 переменных
$dan = 'шесть';
$a='один,два,три,четыре';
$b='пять,шесть,семь';
$c='восемь,девять';
|
нужно узнать в какой из 3 $a,$b,$c лежит кусок текста из переменной $dan
цикл не желателен, т.к. данных в переменной может быть очень много и проверять их циклом не есть гуд.
рассматривал вариант:
if (preg_match ('/^[^'.$dan.']+/u', $a)) {
echo 'в переменной A'.$a;
}elseif (preg_match ('/^[^'.$dan.']+/u', $b)){
echo 'в переменной B'.$b;
}elseif (preg_match ('/^[^'.$dan.']+/u', $b)){
echo 'в переменной C'.$c;
}else{
echo 'пусто';
}
|
срабатывает если $dan = первому значению из какой либо переменной $a,$b,$c
Спасибо! | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 14:56)
| | Значит цикл отвратно, а писать массу строк с рег. выражениями есть гут?. Кстати, если искать "шесть" среди "пять,шесть,семь", то достаточно и стандартных функций, рег. выражения оправданы для сложных поисков. Поиск без циклов обеспечат данные-массивы. | |
|
|
|
|
|
|
|
для: sim5
(10.11.2010 в 15:26)
| | я привел как пример, в переменной $a может быть 500-1000, а то и более данных, и циклить каждую переменную считаю не целесообразно (большая нагрузка на сервер). Если не прав разубедите!
Спасибо! | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:05)
| | так всё же.
У Вас много данных?
Или много переменных?
Если второе, с этим нужно что-то делать. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2010 в 19:15)
| | Переменных от 3 до 10 в каждой через запятую может быть куча данных. | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:18)
| | Давайте так - что за данные содержатся в переменных? | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:18)
| | >Переменных от 3 до 10
ну коль до десяти, так и оставьте.
Неясно, правда, почему elseif , а не просто if | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2010 в 19:21)
| | в переменных содержится информация разного характера все данные отсечены запятой, в переменной $dan может быть только информация содержащиеся в любой переменной от запятой до запятой или вообще пустое. | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2010 в 19:21)
| | потому как есть вариант не что в $dan будет данных совпадения. | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:31)
| | >потому как есть вариант не что в $dan будет данных совпадения.
теперь, пожалуйста, эту же мысль, только по-русски, если не затруднит. | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:31)
| | Или я не понимаю, или...
<?
function getVar($s, $v) {
return substr_count($s, $v) ? 1 : 0;
}
$dan = 'шесть';
$a='один,два,три,четыре';
$b='пять,шесть,семь';
$c='восемь,девять';
echo getVar($b, $dan) ? "есть" : "нетю";
| Зачем рег. выражения, если у вас явное указание значения, а условий, например, по границам значений нет? | |
|
|
|
|
|
|
|
для: sim5
(10.11.2010 в 19:45)
| | довайте заного к примеру в $a='перечисление от одного до тысячи каждое введено через запятую' - пример: $a = 'один,два,три,четыре,пять,.........,тысяча';
$b='колбаса,кура,мясо,валенки,.......,машина';
в $dan может быть к примеру "колбаса" или вообще пусто или к примеру "компьютер", но вот "компьютер" - нету не в одной из переменных. | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:52)
| | данные в переменных не пересекаются и не повторяются. | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 19:52)
| | И что, вышеприведенное никак не поймет, что "колбасы" нет среди "валенок", или найдет ее, если она будет? Что кроме как регуляркой тут не обойтись? Если бы вы искали с условием, например, получения всего значения, если есть в нем вхождение того, что ищем, тогда еще можно было бы понять применение рег. выражений.
А вообще, не лучше ли держать такие "портянки" в виде массива, и искать с помощью их функций? | |
|
|
|
|
|
|
|
для: sim5
(10.11.2010 в 20:14)
| | ладно спасибо за помощь, погляжу, подумаю, попробую реализовать!
пользователь заносит данные через запятую и они добавляются к текущим записям.
ну ладно как я и сказал порешаю если что отпишусь! | |
|
|
|
|
|
|
|
для: ShadowXak
(10.11.2010 в 14:56)
| | Нашел в чем была ошибка моего первого примера.
реализовал следующим образом:
if (preg_match ('/'.trim($dan).'/i', $a)) {
echo 'в переменной A'.$a;
}elseif (preg_match ('/'.trim($dan).'/i', $b)){
echo 'в переменной B'.$b;
}elseif (preg_match ('/'.trim($dan).'/i', $b)){
echo 'в переменной C'.$c;
}else{
echo 'пусто';
}
|
Всем, кто откликнулся, спасибо! | |
|
|
|
|
|
|
|
для: ShadowXak
(16.11.2010 в 07:10)
| | У меня друг сталкивался с такой задачей в универе. Звучала она примерно так: Имеется 10 переменных (a...j), каждая представляет из себя массив данных. Определить в массиве какой переменной содержится значение переменной s='семь'. (задачу задал сам преподаватель, она не из учебника). Решать предлагалось любым способом.
Делал, говорит как-то так:
Все переменные слил в один массив M. Создал ещё оди массив ML, в котором указывались границы старых 10 переменных в массиве M.
Далее искал позицию S в M. Потом смотрел какому элементу ML принадлежит эта позиция. | |
|
|
|