Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Array_diff() - получение уникальних значений

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 09 Октябрь 2010 - 19:48

Привет!

Помогите разобратся в чем моя ошибка?

Пишу скриптик который выполняет такую функцию - сравнивает два масиива (первый со вторым) и возвращает значения первого массива которые не встречаются во втором (уникальные).

Это форма, два поля в которые вводятся ключевые слова через перенос, т.е каждое слово с новой строки.
Форма шлется по Ajax в обработчик action.php где содержимое полей перекодировывается, приводится к общему регистру и дальше формируются два массива первый из содержимого первого поля, второй из содержимого второго поля.

И далее эти массивы сравниваются функцией array_diff(), формируется третий массив содержащий уникальные значения. Затем этот массив переводится в строку и отдается в responseText как ответ Ajax запроса. Этим ответом обновляем содержимое второго поля - это результат.

В FF ввожу в первое поле:

Вася
Петя
Катя
Маша

Во второе поле:

вася

Возвращается то что нужно:

петя
катя
маша

В опере же всеравно возвращается:

вася
петя
катя
маша

НЕ МОГУ ПОНЯТЬ В ЧЕМ ДЕЛО, УЖЕ ГОЛОВУ СЛОМАЛ ПОМОГИТЕ!!!

Это коды:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Unique</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<link rel="stylesheet" type="text/css" href="css.css"/>
<script type="text/javascript" src="mootools-1.2.4-core-yc.js"></script>
<script type="text/javascript">
window.addEvent('domready', function(){
$('submit').addEvent('click', function(){
$('form').get('send', {
method: 'post',
url: 'action.php',
onRequest: function(){

},
onSuccess: function(responseText){
alert(responseText);
$('second').value = '';
$('second').value = responseText;
}
}).send();
});
$('reset').addEvent('click', function(){
$('second').value = '';
});
});
</script>
</head>
<body>
<div class="wrapper">
<form id="form" method="post" action="" accept-charset="utf-8">
<label for="first">Text</label><br/>
<textarea id="first" name="first" rows="" cols=""></textarea><br/>
<label for="second">Pattern / Result</label><br/>
<textarea id="second" name="second" rows="" cols=""></textarea>
<p><input id="submit" class="submit" type="button" value="Unique"/>&nbsp;&nbsp;<input id="reset" class="submit" type="button" value="Reset"/></p>
</form>
</div>
</body>
</html>


Обработчик

<?php 
setlocale (LC_ALL, "ru_RU.CP1251");
if(isset($_POST['first']) && $_POST['second']){
$first = iconv("utf-8", "cp1251", $_POST['first']);
$second = iconv("utf-8", "cp1251", $_POST['second']);

$first_str = trim(strtolower($first));
$second_str = trim(strtolower($second));


if($first_str !== '' && $second_str !== ''){
$first_array = explode("\n", $first_str);
$second_array = explode("\n", $second_str);

$result = implode("\n", array_diff($first_array, $second_array));
echo $result;
}
}
?>



Посмотреть работу скрипта можно здесь - http://profnode.biz/...ique/index.html

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Октябрь 2010 - 11:49

Вячеслав, подебаж alert'ами до отправки в опера и FF и сравни. А затем распечатай в результат на стороне PHP те данные, которые передал и увидишь разницу. Пока не могу помочь, временно занят
  • 0

#3 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 10 Октябрь 2010 - 17:46

Мне кажется проблема в кодировке, но может я и ошибаюсь.
Вот второй вариант без Ajax и в нем после первой отправки формы в первое поле подставляется тоже самое значение только уже из POST может из-за этого???

http://profnode.biz/...e/php/index.php
  • 0

#4 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 10 Октябрь 2010 - 18:33

js работает с utf-8
  • 0

#5 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 10 Октябрь 2010 - 19:26

Сделал уже без JS Ajax. Все равно не работает как надо.
http://profnode.biz/...e/php/index.php
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Октябрь 2010 - 14:16

Вячеслав, попробуй в присланных строках перед тем как резать их по \n:
$str = str_replace("\r\n", "\n", $str);

Если уж это не поможет, то включу стационарный и проверю в Opera. Просто возможно в Opera переход строки в поле снабжается возвратом каретки
  • 0

#7 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 12 Октябрь 2010 - 09:56

Ой спасибо тебе БРАТ! ))) у тебя золотая голова!!!!
Как же ты догадался)))
все работает - array_diff()
  • 0


Оформление форума – IPBSkins.ru