$str=explode(",",strtolower($value));$count=count($str);
for ($x=0;$x<$count;$x++)
{
$len=strlen($str[$x]);
if (($len>255) || (!$len)) return 1;
}
for ($x=0;$x<$count;$x++)
{
for ($n=0;$n<$count;$n++)
{
if ($m!=$n) {if ($str[$m]==$str[$n]) return 1;}
}
}
Возможно ли как нибудь еще проще сделать??
Спустя 18 минут, 44 секунды (11.07.2010 - 21:15) KaFe написал(а):
$str=explode(",",strtolower($value));$count=count($str);
for ($x=0;$x<$count;$x++)
{
$str1=$str;
unset($str1[$x]);$len=strlen($str[$x]);
if (($len>255) || (!$len)) return 1; else
if (in_array($str[$x],$str1)) return 1;
}
И больше я ничего не могу
Спустя 4 минуты, 58 секунд (11.07.2010 - 21:20) twin написал(а):
strtolower
это одинаковые?
PS ай(((
это одинаковые?
PS ай(((
Спустя 2 минуты, 18 секунд (11.07.2010 - 21:23) KaFe написал(а):
Цитата (twin @ 11.07.2010 - 18:20) |
strtolower это одинаковые? |
в каком смысле?strtolower нужно что бы все значения можно было сравнивать без учета регистра
Спустя 6 минут, 56 секунд (11.07.2010 - 21:29) twin написал(а):
ага, я успел "ай" написать. на самом деле наверняка можно проще решить. такая куча циклов чет не вдохновляет. завтра попробуем. )))
Спустя 7 минут, 7 секунд (11.07.2010 - 21:37) Ice написал(а):
у меня вот так получилось
<?php
$value = "hello, World, world";
$str=explode(", ", strtolower($value));
if( count( array_intersect( array_unique( $str ), $str ) ) == count( $str ) ) {
print 'В массиве нет повторяющихся значений!';
} else {
print 'В массиве есть повторяющиеся значения!';
}
?>
Спустя 5 минут, 35 секунд (11.07.2010 - 21:42) KaFe написал(а):
Ice все хорошо, мне твой вариант нравится,но ты не учел что каждое значение не должно быть больше 255 знаков, также значение не могут быть пустыми и должны содержать символы a-zA-Z0-9
Спустя 14 минут, 52 секунды (11.07.2010 - 21:57) Ice написал(а):
Так как-нибудь:
$value = "hello, World, world";
$str = explode( ", ", strtolower( $value ) );
while( list( $k, $v ) = each( $str ) ) {
if( ! preg_match('/^[a-z0-9]{0,255}$/iu', $v ) ) {
unset($str[$k]);
}
}
if( count( array_intersect( array_unique($str), $str ) ) == count( $str ) ) {
print 'В массиве нет повторяющихся значений!';
} else {
print 'В массиве есть повторяющиеся значения!';
}
Спустя 19 минут, 36 секунд (11.07.2010 - 22:17) KaFe написал(а):
Ice Он не работает как надо

Спустя 31 секунда (11.07.2010 - 22:17) Ice написал(а):
что не так-то?
Спустя 39 минут, 45 секунд (11.07.2010 - 22:57) KaFe написал(а):
вот ваш видоизмененный код
так все отлично работает, но если же мы зададим
то результат будет
$value = "hello,hell,fdsss";
$str = explode( ",", strtolower($value) );
while( list( $k, $v ) = each( $str ) ) {
if( ! preg_match('/^[a-z0-9]{0,255}$/iu', $v ) ) die('Строка не проходит');
}
if( count( array_intersect( array_unique($str), $str ) ) != count( $str ) ) die('Строка не проходит');
die('Строка проходит');
так все отлично работает, но если же мы зададим
$value = "s,,ss,sad";
то результат будет
Цитата |
Строка проходит |
а должно быть наооброт
P.S: Пробелов не должно быть вообще нигде.
P.S: Пробелов не должно быть вообще нигде.
Спустя 33 минуты, 23 секунды (11.07.2010 - 23:30) Ice написал(а):
$value = "hello,World,,world";
$str=explode(",", strtolower($value)); // Внимание из разделителя исчез пробел!
while( list( $k, $v ) = each( $str ) ) {
// в каждом значении массива должен быть хотя б один символ
if( ! preg_match('/^[a-z0-9]{1,255}$/i', $v)) {
unset($str[$k]);
}
}
if( count(array_intersect(
array_unique($str), $str ) ) == count( $str ) ) {
print 'В массиве нет повторяющихся значений!';
} else {
print 'В массиве есть повторяющиеся значения!';
}
В итоговом обработанном массиве пустой строки уже нет.
Спустя 14 минут, 50 секунд (11.07.2010 - 23:45) KaFe написал(а):

Спустя 9 минут, 53 секунды (11.07.2010 - 23:55) Ice написал(а):
Ну, вот и славно

Спустя 3 минуты, 16 секунд (11.07.2010 - 23:58) KaFe написал(а):
Замеры показали, что твой код
10000 обращений обрабатывает за
10000 обращений обрабатывает за
Цитата |
0.376 сек. |
а мой
Цитата |
0.199 сек. |
Ты не оптимизировал код, а увеличил использование оперативы в 2 раза. Жду новых идей...........
Спустя 2 минуты, 1 секунда (12.07.2010 - 00:00) Ice написал(а):
<?php
$value = "hello,World,world";
$str=explode(",", strtolower($value));
foreach( $str as $k=>$v ) {
if( ! preg_match('/^[a-z0-9]{1,255}$/i', $v)) {
unset($str[$k]);
}
}
if( count(array_intersect( array_unique($str), $str ) ) == count( $str ) ) {
print 'В массиве нет повторяющихся значений!';
} else {
print 'В массиве есть повторяющиеся значения!';
}
?>
а вот так?
Спустя 3 минуты, 12 секунд (12.07.2010 - 00:03) KaFe написал(а):
прогресс на лицо,0.277 сек. Работа с массивом занимает около 0.1 сек.
Спустя 28 минут, 43 секунды (12.07.2010 - 00:32) Ice написал(а):
убираем strtolower из explode. Он нам уже не нужен, потому что регулярка есть.
Спустя 9 минут, 21 секунда (12.07.2010 - 00:42) KaFe написал(а):
сегодня днем посмотрю, а сейчас пора кровать душить.
Спустя 8 часов, 14 минут, 51 секунда (12.07.2010 - 08:56) ApuktaChehov написал(а):
Вот, я сделал код, который работает 10000 раз за 0.133 без вывода данных в браузер:
$value = 'hello,World,world';
$arr = explode(',', strtolower($value));
foreach($arr as $val)
{
preg_match_all('/(?:'.$val.'){1,255}/iu', $value, $new_arr);
if( count($new_arr[0]) > 1 )
echo('Найдено '.count($new_arr[0]).' повторов значения:' .$val.'<br>');
}
Спустя 1 час, 33 минуты, 59 секунд (12.07.2010 - 10:30) KaFe написал(а):
ApuktaChehov извини за дерзость
но твой код не люлю

Спустя 11 минут, 12 секунд (12.07.2010 - 10:42) ApuktaChehov написал(а):
В смысле?
Спустя 56 минут, 57 секунд (12.07.2010 - 11:39) KaFe написал(а):
не работает как нужно, ну смотрите какие должны быть условия для кода
Результатом должно быть проходит ли строка по данным условиям или нет
- все значения в строке должны быть только разделены запятыми
- значения не должны повторяться
- не должно быть пустых значений
- значения должны состоять из латинских букв и цифр
- значение не должно быть больше 255 символов
Результатом должно быть проходит ли строка по данным условиям или нет
Спустя 25 минут, 19 секунд (12.07.2010 - 12:04) ApuktaChehov написал(а):
А, ну простите тогда, в прочитал первый пост и сделал, а там цель указана:
Цель кода проверить есть ли в строке через запятую одинаковые значения без учета регистра
Цель кода проверить есть ли в строке через запятую одинаковые значения без учета регистра
Спустя 5 минут (12.07.2010 - 12:09) KaFe написал(а):
Цитата (ApuktaChehov @ 12.07.2010 - 09:04) |
А, ну простите тогда, в прочитал первый пост и сделал, а там цель указана: |
прощаю.

Спустя 6 дней, 5 часов, 24 минуты, 33 секунды (18.07.2010 - 17:33) gzim9x написал(а):
Цитата (KaFe @ 11.07.2010 - 21:15) |
$str=explode(",",strtolower($value));$count=count($str); И больше я ничего не могу |
немного изменил...
function compareStr($string) {
$arr=explode(",",strtolower($string));
for ($i=0,$count=count($arr);$i<$count;$i++) {
if (!isset($arr[$i][0]) || isset($arr[$i][255]))
return 1;
$s=$arr[$i];
unset($arr[$i]);
if (in_array($s,$arr))
return 1;
}
return 0;
}
Спустя 2 часа, 32 минуты, 21 секунда (18.07.2010 - 20:06) KaFe написал(а):
gzim9x я вообще не понимаю ваш код
.

Спустя 1 час, 1 минута, 14 секунд (18.07.2010 - 21:07) Nikitian написал(а):
gzim9x
Вы в заголовке вроде бы ";" перепутали с "," - так говорит мой внутренний препроцессор =)
Вы в заголовке вроде бы ";" перепутали с "," - так говорит мой внутренний препроцессор =)
Спустя 4 часа, 37 минут, 35 секунд (19.07.2010 - 01:45) gzim9x написал(а):
Цитата (Nikitian @ 18.07.2010 - 21:07) |
Вы в заголовке вроде бы ";" перепутали с "," - так говорит мой внутренний препроцессор =) |
если вы о "for" -- то все верно написано
Спустя 13 минут, 10 секунд (19.07.2010 - 01:58) gzim9x написал(а):
Цитата (KaFe @ 18.07.2010 - 20:06) |
gzim9x я вообще не понимаю ваш код ![]() |
отличия от вашего кода только в 2 вещах:
1. вместо srtlen() на проверку размера строки используется конструкция isset для проверки есть ли в строке символы с индексом 255 (256 символ), или она пустая - нет символа с индексом 0 -- так быстрее.
2. вместо копирования массивов поиск дубля осуществляется в этом же массиве (с предварительным удалением искомой строки по индексу -- иначе in_array всегда будет true).
Спустя 5 часов, 45 минут, 10 секунд (19.07.2010 - 07:43) KaFe написал(а):
gzim9x хм, не знаю не знаю, как то все уж сложно для моего маленького мозга
