926

Re: Выпадающий список

Я пытаюсь сравнить два масива один состоит из строк типа
1.
большое яблоко
красная морковь
зеленый огурец

2. он же база слов которые я ищу в 1. масиве

яблоко
огурец
морковь

если сравнивать масивы функцией in_array то сравнить я могу лиш строку по точному совпадению
но в етом случае код

$a = array();
$result = mysql_query("SELECT brand FROM baza",$db);
while ($myrow = mysql_fetch_array($result)) {
$a[] = $myrow['brand'];
}

$b = array();
$result = mysql_query("SELECT model FROM baza",$db);
while ($myrow = mysql_fetch_array($result)) {
$b[] = $myrow['model'];
}

$result2 = mysql_query("SELECT * FROM poisk",$db);
while ($myrow2 = mysql_fetch_array($result2)) {
  
      
if (in_array("".$myrow2["text"]."", $a)  ) {

    
print"есть повтор <font color='#ff0000'><b>".$myrow2["text"]." +++++ ".$myrow2["postav"]."</b></font><br> ";

        }
    else {
print"нету повтора ".$myrow2["text"]." <br> ";

        }
      }

выводит данные так как нужно а именно на выходе я имею столбик всех искомых строк и напротив совпавшие либо не совпавшие строки


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

927

Re: Выпадающий список

Надо пройти по циклу массива и в цикле проверить все слова. Массив перебирается с помощью конструкции foreach. Как формируется поиск регулярным выражением - мы уже рассматривали.

928

Re: Выпадающий список

Да получилось через do, есть вопрос как в запросе выбрать строки длина которых больше 20 символов

$result = mysql_query("SELECT * FROM poisk where SUBSTRING(`text`, 1, 20)  AS `substring_text` > 20",$db);

чтото типа етого но не выходит

929

Re: Выпадающий список

Извеняюсь нашел LENGTH(`text`) < 20

930

Re: Выпадающий список

Подскажите пожалуйста. Я читаю масив значений А сравниваю его с масивом Б если есть совпадения вывожу дело в том что в масиве Б есть несколько значений совпадающих с масивом А но все они разной длины строки. Как определить самую длинную строку совпадающую с масивом А в масиве Б ?

931

Re: Выпадающий список

павелsimon сказал:

Подскажите пожалуйста. Я читаю масив значений А сравниваю его с масивом Б если есть совпадения вывожу дело в том что в масиве Б есть несколько значений совпадающих с масивом А но все они разной длины строки. Как определить самую длинную строку совпадающую с масивом А в масиве Б ?

Необходимо собрать в отдельный массив все совпадения и затем пройти его в цикле для определения самой длинной строки.

932

Re: Выпадающий список

Вот собрал в масив

        $с = array();
        $arr[] = $c;
sort($arr);
foreach ($arr as  $val) {
    echo "строка" . $val . "<br>";
}

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

933

Re: Выпадающий список

Запишите в массив все найденное и если этот массив не будет пустым, то в цикле пройдите его и найдите самую длинную строку. То, что вы написали - это просто пустой массив.

934 (изменено: павелsimon, 2013-04-30 11:14:41)

Re: Выпадающий список

Нет он не пустой он получает данные я нашол самую длинную строку но дело в том что их несколько одинаковой длинны и из них мне нужно достать только одну




весь код выглядит так

do{
$a = strtoupper($myrow["text"] );  строка из цикла в которой ищем слова из базы
$с = strtoupper($myrow2["stroka"]);
if(strstr($a, $с)  ) 
 /// ищем слово $с в строке $а
    {
$с = array();
        $arr[] = strlen($c);
$mm = max($arr);
        echo "$mm<br>";

в итоге я получаю несколько значений строк тоесть их цифровых значений

15
12
11
а нужно выделить лиш одно так как оно будет в начале то первое

935

Re: Выпадающий список

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

подскажите как собрать все найденные строки в мисив

936

Re: Выпадающий список

$arr[] = $c;
// Далее делаем цикл.
$longest = '';
foreach($arr as $value) {
  if (strlen($value) > strlen($longest)) {
    $longest = $value;
  }
}

937

Re: Выпадающий список

Тоесть мне заранее нужно знать длину переменной $longest ?

938

Re: Выпадающий список

павелsimon сказал:

$longest

После цикла foreach у вас будет переменная $longest с самой длинной строкой массива.

939

Re: Выпадающий список

чтото не то.

получаются много отдельных масивов из строк, а нужно все найденые строки поместить в масив
по условию

do{
$a = strtoupper($myrow["text"] ); 
$b = strtoupper($myrow2["stroka"]);

if(strstr($a, $b)  ) 
 /// ищем слово $b в строке $а
    {


/// здесь если слово $b найдено в строке $a допустим выводим его

 echo "$b";

//здесь не пойму как все найденные переменные $b поместить в один масив а не из каждой из них создать масив

    }
        
}
while($myrow2 = mysql_fetch_array($result2));

940

Re: Выпадающий список

$array[] = $b;
Будет создан массив $array с элементами найденных строк.

941

Re: Выпадающий список

нет в данном случае формируется масив из одной строки - найденой потом следующий масив потом еще, столько масивов сколько строк найдено из условия

if(strstr($a, $b)  ) 
 /// ищем слово $b в строке $а
    {

я догадываюсь что причина в цикле

do{


        
}
while($myrow2 = mysql_fetch_array($result2));

видимо нужно все проганять через foreach

942

Re: Выпадающий список

тоже не то, что же здесь можно придумать?

943

Re: Выпадающий список

Соберите многомерный массив.
$array[$b][] = $b;

944

Re: Выпадающий список

дело в том что у меня не получается все найденные результаты поместить в масив.
тоесть по условию

do{

нахожу совпадения в строке
собираю найденное в масив
получаю масив из одной строки естественно!

(а нужно чтоб все пройденніе ціклі попали в один масив)

}
while( условие...

как здесь біть

945

Re: Выпадающий список

do{

$where = 'строка в которой ищем';
$str = 'строка'; // строка, которую ищем
$a[$str][] = $where; //собираю найденное в масив
// получаю масив из одной строки естественно!

(а нужно чтоб все пройденніе ціклі попали в один масив)

}
while( условие...

foreach ($a as $key => $value) {
  print $key . ' - ' . implode(', ', $value);
}

946

Re: Выпадающий список

Ну никак не получается собрать в один масив

$result = mysql_query("SELECT stroka FROM baza_all",$db);
do {
$a = $myrow["stroka"];
$b = "11111111";
    if(strstr($b, $a)  ) { /// ищем слово $a в строке $b  
print"$a<br>";
    }
    }
while ($myrow = mysql_fetch_array($result));

на выходе есть столбик совпадений
1
111
11
111
1111
Как все ети строки поместить в один масив?

947

Re: Выпадающий список

Вместо print"$a<br>"; напишите $array[] = $a;

948

Re: Выпадающий список

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

// вариант без цыкла работает так как надо
$result2 = mysql_query("SELECT stroka FROM baza_all",$db);
while ($myrow2 = mysql_fetch_array($result2)){
$a = $myrow2["stroka"];
$b = "11111111";    //строка которую не получается подставлять циклом
    if(strstr($b, $a)  ) { /// ищем слово $a в строке $b  
$array[] = $a;
    }
    }
array_multisort($array,SORT_DESC); //сортирую для получения елемента максимальной длины
print_r ($array); // вывожу весь масив для проверки
print"<br>$array[0] ==>$b<br>";

в переменую $b подставляю результат из выборки базы но не получается прокрутить цикл для каждого елемента базы

$result = mysql_query("SELECT text  FROM poisk",$db);
$myrow = mysql_fetch_array($result);
do{
$b = $myrow["text"];
если здесь подставляю код приведенный выше то в результате 
}
while ($myrow = mysql_fetch_array($result));

вобщем не то совсем не могу сообразить, как к каждому елементу в цикле применить самый перевый код

949

Re: Выпадающий список

Оберните первый код в функцию и во втором коде вызовите функцию с нужным параметром.

function a_func($b) {
  $array = array();
  $result2 = mysql_query("SELECT stroka FROM baza_all",$db);
  while ($myrow2 = mysql_fetch_array($result2)) {
    $a = $myrow2["stroka"]; 
    if(strstr($b, $a)  ) { /// ищем слово $a в строке $b  
      $array[] = $a;
    }
  }
  return $array;
}

a_func($myrow["text"]);

950

Re: Выпадающий список

Почемуто бет ошибку

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in Z:\home\localhost\www\POISK\test10.php on line 20

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\POISK\test10.php on line 2

по строкам

$result2 = mysql_query("SELECT stroka FROM baza_all",$db);
while ($myrow2 = mysql_fetch_array($result2)){

строки существуют