Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логическая цепочка 
V
    Опции темы
box
Дата 19.3.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



Люди , помогите разобратся , ничего не получается , а именно , есть два массива , нужно опредилить какие элементы идентичны , а какие нет , короче говоря , если елемент 1 из массива 1 отсутствует во всем  массиве 2 , значит идет одна ветка программы , в противном случае другая . все вроде-бы очень просто !!!
Код

<?
$zek=0;
for ($co=1; $co<count($text);$co++)
{
 if ($zek=count($baza1))
     {
     print "$zek>>>>А этих элементов нет в списке"."-------".$text[$co]."<br>";
        $zek=0;
     }
for ($co1=1; $co1<count($baza1);$co1++)
{
 similar_text($text[$co], $baza1[$co1], &$tmp);
        if ($tmp > 90) {
         $zek=0;
print "$zek>>>Найдено совпадений "."=======".$text[$co].">>>--->>".$baza1[$co1]."<br>";
         
            }
     else
     {
     $zek++;
     }
     }
    
     }

?>


 ! 
PARROT
Большая просьба не использовать в заголовках вопросительные знаки!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Это сообщение отредактировал(а) PARROT - 19.3.2007, 09:35
PM MAIL   Вверх
mishaSL
Дата 19.3.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



box, не до конца понятна логика вашего кода.
Вообще для этих целей используются функции in_array() и array_search()


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
box
Дата 19.3.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



да нет эти функции мне не подойдут , во первых мне нужно не 100% совпадение искать , а во вторых мне важно знать где , на какой позиции в масиве произошло совпадение ! 
 мне нужно что-бы надпись " а этих элементов нет в массиве " выводилась в том случае если в массиве baza1 Не найдено ни одно совпадение  с массиом $text !!! т.е так -берем 1 элеммент из масива $text И сравнивам его со всеми элементами масива baza1 и в случае не найденом , выводим надпись !!!
и так в цыкле , до тех пор , пока массив $text Не опустеет !

PM MAIL   Вверх
box
Дата 19.3.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



а у меня повторяются совпавшие с несопавшими элементы !!!
вот скриншот:
13340>>>>А этих элементов нет в списке-------12 Stones - Broken
0>>>Найдено совпадений =======12 Stones - Broken>>>--->>12 Stones-Broken
13340>>>>А этих элементов нет в списке-------12 Stones - Running Out Of Pain
13340>>>>А этих элементов нет в списке-------140 ударов в минуту - Ой-Ой-Ой
0>>>Найдено совпадений =======140 ударов в минуту - Ой-Ой-Ой>>>--->>140 ударов в минуту-Ой-Ой-Ой



PM MAIL   Вверх
box
Дата 19.3.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



Да , и что самое интересное , так это то что логически все верно : берем первый элемент из массива 
$text  и сравниваем его со всеми элементами масива $baza1 в случае совпадения , выводим надпись , а в случае не совпадения $zek++; На выходе из цыкла проверяем , равно ли $zek count($baza1), и если да , то выводим надпись " элемент отсутсвует в массиве " , обнуляем $zek , и повторяем цыкл до count($text) !!!
вродебы все правельно , а все равно не хочет работать так как надо !!! Почему ???
PM MAIL   Вверх
mishaSL
Дата 19.3.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Я думаю так будет лучше:
Код

<?php
$text1 = array('asd','asdasda','ghdfhgfhf','1234');
$base1 = array('asd', 'asdsda','asdassda','ghdsfhgfhf', 'gdsr');
function test(& $value, $key, &$more)
{
    $tmp = 0;
    similar_text($value, $more['str_search'], &$tmp);    
    if ($tmp>90) {
        $more['log'].= 'Совпадение &laquo;'.$value.'&raquo; с &laquo;'.$more['str_search'].'&raquo; - '.$tmp.'%<br />';
        $more['count']++;
    }
}

foreach($text1 as $value)
{
    $more = array('str_search'=>$value, 'count'=>0,'log'=>'');
    array_walk($base1, 'test', &$more);

    if ($more['count']>0) {
        print 'для элемента &laquo;'.$value.'&raquo; найдено '.$more['count'].' совпадений:<br>';
        print $more['log'];
    } else {
        print 'для элемента &laquo;'.$value.'&raquo; совпадений не найдено<br>';
    }
}

?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
box
Дата 19.3.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



Спасибо конечно , но боюсь что этот вариант мне не очень-то подойдет , потому-что мне важно знать в какой позиции в обоих массивах найдено совпадение , что-бы знать в какой последовательности заносить в бд !!!иными словами , я-ж не просто так поставил у себя в коде вложенный цыкл !!!
Да кстати , ваш код работает отлично , а почему-же мой не работает ? ведь все логически правельно построено !!!

Это сообщение отредактировал(а) box - 19.3.2007, 18:46
PM MAIL   Вверх
mishaSL
Дата 19.3.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(box @  19.3.2007,  18:34 Найти цитируемый пост)
важно знать в какой позиции в обоих массивах найдено совпадение


т.е. индексы найденных элементов, так это тоже не большая проблема:
Код

<?php
$text1 = array('asd','asdasda','ghdfhgfhf','1234');
$base1 = array('asd', 'asdsda','asdassda','ghdsfhgfhf', 'gdsr');
function test(& $value, $key, &$more)
{
    $tmp = 0;
    similar_text($value, $more['str_search'], &$tmp);    
    if ($tmp>90) {
        $more['log'].= 'Совпадение &laquo;'.$value.'&raquo; (индекс '.$key.') с &laquo;'.$more['str_search'].'&raquo; - '.$tmp.'%<br />';
        $more['count']++;
    }
}
foreach($text1 as $key=>$value)
{
    $more = array('str_search'=>$value, 'count'=>0,'log'=>'');
    array_walk($base1, 'test', &$more);
    if ($more['count']>0) {
        print 'для элемента &laquo;'.$value.'&raquo; (индекс '.$key.') найдено '.$more['count'].' совпадений:<br>';
        print $more['log'];
    } else {
        print 'для элемента &laquo;'.$value.'&raquo; (индекс '.$key.') совпадений не найдено<br>';
    }
}
?>


А структуру массива $more уже меняешь как хочешь, можешь в $more['log'] заносить индекс и процент совпадения и т.д.


Цитата(box @  19.3.2007,  18:34 Найти цитируемый пост)
а почему-же мой не работает ?

1.
Цитата(box @  19.3.2007,  08:56 Найти цитируемый пост)
($zek=count($baza1))

Это не сравнение. а присвоение, оно всегда будет true, сравнение ==

2. Ты уверен что индексы в этих двух массивах совпадают и начинаются с единицы

3. Логика всетаки странная

Если уже перебирать циклами, то что-то вроде этого:
Код

foreach($text as $t_key=>$t_value) {
    $zek=0;
    foreach($base1 as $b_key=>$b_value) {
        $tmp = 0;
        similar_text($text[$t_key], $base1[$b_key], &$tmp);
        if ($tmp > 90) {
            $zek++;
            print ">>>Найдено совпадение "."=======".$text[$t_key].">>>--->>".$base1[$b_key]."<br>";         
        }        
    }
    if ($zek == 0) {
        print 'для элемента '.$t_value.' совпадений не найдено';
    }
}





--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
box
Дата 19.3.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 27.2.2007

Репутация: 0
Всего: 0



ну класс , спасибо большое !!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.