[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Игра-практика
Zzepish
Я вот придумал такую развлекательную игру, для местного заведения:
Я (так как у меня первый пост), даю задание по написанию в php. Описываю пункты.
Кто-то его выполняет, далее тот, кто выполнил, дает свое задание, и тот, кто его выполнит, дает далее задание свое.

Надеюсь смысл понятен.

Мое задание:

Автоматическая замена смайлов с циклом!
Тоесть, чтоб не надо было каждый раз писать str_replace();
А просто достаточно было добавить значения в массив\базу



Спустя 58 минут, 17 секунд (28.06.2012 - 16:46) FatCat написал(а):
function do_smiles($txt=""){
$smiles = array(
':)' => 'smile.gif',
';)' => 'smile1.gif',
':D' => 'lol.gif',
':P' => 'bleh.gif'
);
foreach($smiles as $k=>$v)
$txt = str_replace($k,'<img src="'.$v.'" alt="'.$k.'" border="0">',$txt)
return $txt;
}

Спустя 5 минут, 51 секунда (28.06.2012 - 16:52) FatCat написал(а):
А теперь задание.
"Знак двоеточия (:) в тексте" - здесь не должно заменять.
"Знак двоеточия (не .. а :) в тексте" - здесь тоже не должно заменять.

Спустя 6 минут, 8 секунд (28.06.2012 - 16:58) twin написал(а):
А зачем цикл то?
function do_smiles($txt = ""){
$smiles = array(
':)' => 'smile.gif',
';)' => 'smile1.gif',
':D' => 'lol.gif',
':P' => 'bleh.gif'
);

$txt = str_replace(array_keys($smiles), $smiles, $txt);
return $txt;
}

Спустя 1 минута, 28 секунд (28.06.2012 - 17:00) TMake написал(а):
function do_smiles($txt=""){
$smiles = array(
array('pattern' => ':)', 'value' => 'smile.gif'),
array('pattern' => ';)', 'value' => 'smile1.gif'),
array('pattern' => ':D', 'value' => 'lol.gif'),
array('pattern' => ':P', 'value' => 'bleh.gif')
);


return requrse_smiles($smiles, 0, $text);
}

function requrse_smiles($array, $num, $txt){
$txt = str_replace($array[$num]['pattern'],'<img src="'.$array[$num]['value'].'" alt="'.$array[$num]['pattern'].'" border="0">',$txt);
$num++;
return (count($array)>$num)? requrse_smiles($array, $num, $txt): $txt;
}

Спустя 18 минут, 20 секунд (28.06.2012 - 17:18) pak написал(а):
За Вами не успеть smile.gif
давайте еще)

Спустя 45 минут, 11 секунд (28.06.2012 - 18:03) Zzepish написал(а):
pak
дык уже есть
Цитата

А теперь задание.
"Знак двоеточия (smile.gif в тексте" - здесь не должно заменять.
"Знак двоеточия (не .. а smile.gif в тексте" - здесь тоже не должно заменять.

Вместо смайлов там : ) (без пробела)

Спустя 6 минут, 31 секунда (28.06.2012 - 18:10) pak написал(а):
Zzepish
Решение предоставил stepan

Спустя 4 минуты, 28 секунд (28.06.2012 - 18:14) Zzepish написал(а):
pak
а. я проворонил.
stepan
С тебя задание же)

Спустя 15 часов, 12 минут, 32 секунды (29.06.2012 - 09:27) TMake написал(а):
Цитата (Zzepish @ 28.06.2012 - 19:14)
С тебя задание же)

Сделать из
HeLlO WoRlD!
строку
!dLrOw oLlEh
не используя strrev strrev_utf8

Спустя 52 минуты, 33 секунды (29.06.2012 - 10:19) Placido написал(а):
$a = 'HeLlO WoRlD!';
function case_reverse($matches)
{
$upper = isset($matches[1]) ? $matches[1] : '';
$lower = isset($matches[2]) ? $matches[2] : '';
return strtolower($upper) . strtoupper($lower);
}
echo implode('', array_reverse(str_split(preg_replace_callback('#([A-Z])|([a-z])#u', 'case_reverse', $a))));
//!dLrOw oLlEh

Спустя 1 час, 9 минут, 8 секунд (29.06.2012 - 11:29) Zzepish написал(а):
Placido
Теперь ты пишишь задание =)

Спустя 44 минуты, 28 секунд (29.06.2012 - 12:13) Placido написал(а):
Написать функцию проверки валидности регулярного выражения (регулярка может быть любой).

Спустя 2 дня, 21 час, 16 минут, 7 секунд (2.07.2012 - 09:29) TMake написал(а):
Цитата (Placido @ 29.06.2012 - 13:13)
Написать функцию проверки валидности регулярного выражения (регулярка может быть любой).

Какое тз - такой и результат:


function ifReg($pattern,$data){
return (preg_match($pattern, $data) == 1)? true: false;
}

Спустя 8 минут, 28 секунд (2.07.2012 - 09:38) TMake написал(а):
думаю будет интересным это задание -
Цитата (FatCat @ 28.06.2012 - 17:52)
А теперь задание.
"Знак двоеточия (smile.gif в тексте" - здесь не должно заменять.
"Знак двоеточия (не .. а smile.gif в тексте" - здесь тоже не должно заменять.


Спустя 54 минуты, 38 секунд (2.07.2012 - 10:32) Placido написал(а):
Цитата (stepan @ 2.07.2012 - 09:29)
Цитата (Placido @ 29.06.2012 - 13:13)
Написать функцию проверки валидности регулярного выражения (регулярка может быть любой).

Какое тз - такой и результат:


function ifReg($pattern,$data){
return (preg_match($pattern, $data) == 1)? true: false;
}

Не-а. Вводим
ifReg('/{[]{[())/', '');

И получаем
Warning: preg_match(): Compilation failed: missing terminating ] for character class at offset 8 in C:\Users\Public\Apache2.2\htdocs\BLOG\test2.php on line 4

А нужно, чтобы в случае невалидной регулярки (как та, что выше, например) мы получали что-то внятное, например, "Регулярное выражение составлено неверно".

Спустя 9 минут, 22 секунды (2.07.2012 - 10:42) TMake написал(а):
Быдло код всех нас спасет :lol:
function ifReg($pattern,$data){
return @(preg_match($pattern, $data) == 1)? true: 'Регулярное выражение составлено неверно';
}

Спустя 9 минут, 12 секунд (2.07.2012 - 10:51) Placido написал(а):
Цитата (stepan @ 2.07.2012 - 10:42)
function ifReg($pattern,$data){
  return @(preg_match($pattern, $data) == 1)? true: 'Регулярное выражение составлено неверно';
}

Не спасет )) Вводим валидную регулярку
echo ifReg('/([ddd])/', '');

И получаем
Регулярное выражение составлено неверно


Спустя 8 минут, 18 секунд (2.07.2012 - 10:59) TMake написал(а):
Цитата (Placido @ 2.07.2012 - 11:51)
Не спасет )) Вводим валидную регулярку

И в чем же она не валидна?

Спустя 2 минуты, 28 секунд (2.07.2012 - 11:02) Placido написал(а):
Цитата (stepan @ 2.07.2012 - 10:59)
Цитата (Placido @ 2.07.2012 - 11:51)
Не спасет )) Вводим валидную регулярку

И в чем же она не валидна?

В том-то и дело. Она валидна, а мы получаем сообщение, что она составлена неверно.

Спустя 4 минуты, 15 секунд (2.07.2012 - 11:06) TMake написал(а):
Цитата (Placido @ 2.07.2012 - 12:02)
Она валидна

Где же она валидна для пустой строки?
Объясни а то я не уловлю мысль...

Спустя 7 минут, 5 секунд (2.07.2012 - 11:13) Placido написал(а):
Не в пустой строке дело. В твоей функции и в случае валидной, и в случае невалидной регулярки получаем одно и то же сообщение - "Регулярное выражение составлено неверно".

Спустя 3 минуты, 11 секунд (2.07.2012 - 11:16) Invis1ble написал(а):
я вот так наговнокодил по-быстрому :P
Свернутый текст
function validate_regexp($regexp) {
set_error_handler(function ($errno, $errstr) {
if ($errno == 2)
throw new Exception('Invalid regexp', 0);
});
try {
preg_match($regexp, '');
$result = true;
}
catch (Exception $e) {
$result = $e->getCode() !== 0;
}
restore_error_handler();
return $result;
}

Спустя 4 минуты, 5 секунд (2.07.2012 - 11:20) TMake написал(а):
Цитата (Placido @ 2.07.2012 - 12:13)
Не в пустой строке дело. В твоей функции и в случае валидной, и в случае невалидной регулярки получаем одно

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

Спустя 7 минут, 18 секунд (2.07.2012 - 11:27) Placido написал(а):
Еще вариант без исключений )
Свернутый текст
function regex_check ($regex)
{
ob_start();
preg_match($regex, '');
$error = ob_get_clean();
return $error ? 'Ошибка в регулярном выражении!' : 'Регулярное выражение валидно.';
}

Спустя 6 минут, 39 секунд (2.07.2012 - 11:34) TMake написал(а):
Цитата (Placido @ 2.07.2012 - 12:27)
Еще вариант без исключений )

Интересный способ

Спустя 1 минута, 50 секунд (2.07.2012 - 11:36) Invis1ble написал(а):
Цитата
Интересный способ

согласен, только в реальных условиях вполне вероятно неработоспособный
ini_set('display_errors', 'Off');
echo regex_check('#'); // Регулярное выражение валидно.

Спустя 8 минут, 41 секунда (2.07.2012 - 11:45) Invis1ble написал(а):
а теперь прикол
var_dump(filter_var('##', FILTER_VALIDATE_REGEXP));

Правда у меня выдает все время false и warning, судя по всему баг пыхи
Цитата
Warning: filter_var(): 'regexp' option missing in ...


Update.
Это не баг, а не правильно вызвана функция. Надо почаще в ман заглядывать :D

Спустя 1 час, 9 минут, 31 секунда (2.07.2012 - 12:54) TMake написал(а):
Цитата (Invis1ble @ 2.07.2012 - 12:36)
согласен, только в реальных условиях вполне вероятно неработоспособный

Инвиз - за тобой задание

Спустя 3 часа, 37 минут, 20 секунд (2.07.2012 - 16:31) Invis1ble написал(а):
Чет на ум ничего не приходит... Да и имеет смысл ли? ТС пропал куда-то, а мы то с вами такие задачки итак порешаем )

Спустя 1 час, 38 минут, 53 секунды (2.07.2012 - 18:10) inpost написал(а):
Я могу задать, Инвиз уже знает задачку.
Есть массив:
1=>'x'
2=>'y'
3=>'x'
4=>'z'
5=>'a'
6=>'a'
Задача: найти копии, то есть вернуть ключи: 1,3,5,6 с их значениями. Те данные, которые не дублируются - в финальном результате не должны быть.

Спустя 1 час, 10 минут, 39 секунд (2.07.2012 - 19:21) pak написал(а):

<?php
$arr = array(
1 => 'a',
2 => 'y',
3 => 'x',
4 => 'z',
5 => 'a',
6 => 'a',
7 => 'x'
);
for($i = 1; $i <= count($arr); $i++)
{


for($k = 1 + $i; $k <= count($arr); $k++)
{

if($arr[$i] == $arr[$k])
{
$key[$i] = $arr[$i];
$key[$k] = $arr[$k];
}
}
}

print_r($key);
?>

Выводит:

Array
(
[1] => a
[5] => a
[6] => a
[3] => x
[7] => x
)

Спустя 27 минут, 19 секунд (2.07.2012 - 19:48) Placido написал(а):
$array = array(1=>'x', 2=>'y', 3=>'x', 4=>'z', 5=>'a', 6=>'a');
$count_values = array_count_values($array);
foreach ($array as $key => $value) {
if($count_values[$value] === 1)
unset($array[$key]);
}
print_r($array);//Array ( [1] => x [3] => x [5] => a [6] => a )

Спустя 22 часа, 48 минут, 11 секунд (3.07.2012 - 18:36) Zzepish написал(а):
Invis1ble
Нифига я не пропал) просто меня на дачу загребли на 4 дня)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.