Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Найти в какой переменной нужное значение
 
 автор: ShadowXak   (10.11.2010 в 14:56)   письмо автору
 
 

Добрый день!
Задача следующая имеется 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

Спасибо!

  Ответить  
 
 автор: sim5   (10.11.2010 в 15:26)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 14:56)
 

Значит цикл отвратно, а писать массу строк с рег. выражениями есть гут?. Кстати, если искать "шесть" среди "пять,шесть,семь", то достаточно и стандартных функций, рег. выражения оправданы для сложных поисков. Поиск без циклов обеспечат данные-массивы.

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:05)   письмо автору
 
   для: sim5   (10.11.2010 в 15:26)
 

я привел как пример, в переменной $a может быть 500-1000, а то и более данных, и циклить каждую переменную считаю не целесообразно (большая нагрузка на сервер). Если не прав разубедите!

Спасибо!

  Ответить  
 
 автор: Trianon   (10.11.2010 в 19:15)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:05)
 

так всё же.
У Вас много данных?
Или много переменных?

Если второе, с этим нужно что-то делать.

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:18)   письмо автору
 
   для: Trianon   (10.11.2010 в 19:15)
 

Переменных от 3 до 10 в каждой через запятую может быть куча данных.

  Ответить  
 
 автор: sim5   (10.11.2010 в 19:20)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:18)
 

Давайте так - что за данные содержатся в переменных?

  Ответить  
 
 автор: Trianon   (10.11.2010 в 19:21)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:18)
 

>Переменных от 3 до 10
ну коль до десяти, так и оставьте.
Неясно, правда, почему elseif , а не просто if

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:29)   письмо автору
 
   для: Trianon   (10.11.2010 в 19:21)
 

в переменных содержится информация разного характера все данные отсечены запятой, в переменной $dan может быть только информация содержащиеся в любой переменной от запятой до запятой или вообще пустое.

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:31)   письмо автору
 
   для: Trianon   (10.11.2010 в 19:21)
 

потому как есть вариант не что в $dan будет данных совпадения.

  Ответить  
 
 автор: Trianon   (10.11.2010 в 19:42)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:31)
 

>потому как есть вариант не что в $dan будет данных совпадения.

теперь, пожалуйста, эту же мысль, только по-русски, если не затруднит.

  Ответить  
 
 автор: sim5   (10.11.2010 в 19:45)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:31)
 

Или я не понимаю, или...
<?
function getVar($s$v) {
  return 
substr_count($s$v) ? 0;
}

$dan 'шесть'
$a='один,два,три,четыре'
$b='пять,шесть,семь'
$c='восемь,девять';
echo 
getVar($b$dan) ? "есть" "нетю";
Зачем рег. выражения, если у вас явное указание значения, а условий, например, по границам значений нет?

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:52)   письмо автору
 
   для: sim5   (10.11.2010 в 19:45)
 

довайте заного к примеру в $a='перечисление от одного до тысячи каждое введено через запятую' - пример: $a = 'один,два,три,четыре,пять,.........,тысяча';
$b='колбаса,кура,мясо,валенки,.......,машина';

в $dan может быть к примеру "колбаса" или вообще пусто или к примеру "компьютер", но вот "компьютер" - нету не в одной из переменных.

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 19:55)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:52)
 

данные в переменных не пересекаются и не повторяются.

  Ответить  
 
 автор: sim5   (10.11.2010 в 20:14)   письмо автору
 
   для: ShadowXak   (10.11.2010 в 19:52)
 

И что, вышеприведенное никак не поймет, что "колбасы" нет среди "валенок", или найдет ее, если она будет? Что кроме как регуляркой тут не обойтись? Если бы вы искали с условием, например, получения всего значения, если есть в нем вхождение того, что ищем, тогда еще можно было бы понять применение рег. выражений.
А вообще, не лучше ли держать такие "портянки" в виде массива, и искать с помощью их функций?

  Ответить  
 
 автор: ShadowXak   (10.11.2010 в 20:33)   письмо автору
 
   для: sim5   (10.11.2010 в 20:14)
 

ладно спасибо за помощь, погляжу, подумаю, попробую реализовать!
пользователь заносит данные через запятую и они добавляются к текущим записям.
ну ладно как я и сказал порешаю если что отпишусь!

  Ответить  
 
 автор: ShadowXak   (16.11.2010 в 07:10)   письмо автору
 
   для: 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 'пусто';



Всем, кто откликнулся, спасибо!

  Ответить  
 
 автор: blackcement   (16.11.2010 в 13:06)   письмо автору
 
   для: ShadowXak   (16.11.2010 в 07:10)
 

У меня друг сталкивался с такой задачей в универе. Звучала она примерно так: Имеется 10 переменных (a...j), каждая представляет из себя массив данных. Определить в массиве какой переменной содержится значение переменной s='семь'. (задачу задал сам преподаватель, она не из учебника). Решать предлагалось любым способом.
Делал, говорит как-то так:
Все переменные слил в один массив M. Создал ещё оди массив ML, в котором указывались границы старых 10 переменных в массиве M.
Далее искал позицию S в M. Потом смотрел какому элементу ML принадлежит эта позиция.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования