Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: не работает программа
Форумы портала PHP.SU » » Вопросы новичков » не работает программа

Страниц (2): [1] 2 »
 

1. mr.Kravcoff - 06 Апреля, 2015 - 18:44:04 - перейти к сообщению
<?php
function remove_numbers ($str){
$res='';
for ($i=0;$i<strlen($str);$i++) {
if ($str[$i]==0 ||$str[$i]==1||$str[$i]==2||$str[$i]==3||$str[$i]==4||$str[$i]==5||$str[$i]==6||
$str[$i]==7||$str[$i]==8||$str[$i]==9)
$res .= '';
else $res .= $str[$i];
}
echo $res;
}
remove_numbers ('t07i 98po6be85dil') ;

?>

по идее должны убираться числа из строки, но почему-то в браузере ничего не выводится, помогите, пожалуйста, разобраться
2. esterio - 06 Апреля, 2015 - 18:57:01 - перейти к сообщению
1. Если кодировка UTF-8 то такой финт не прокатит
2. зачем так много условий если можно сделать хотябы так

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

либо так
3. mr.Kravcoff - 06 Апреля, 2015 - 19:03:55 - перейти к сообщению
а что такое регулярка?
(Добавление)
и почему именно не покатит финт?
4. esterio - 06 Апреля, 2015 - 21:38:25 - перейти к сообщению
https://ru[dot]wikipedia[dot]org/wiki/%D[dot][dot][dot]0%BD%D0%B8%D1%8F
5. OrmaJever - 07 Апреля, 2015 - 13:00:48 - перейти к сообщению
esterio пишет:
1. Если кодировка UTF-8 то такой финт не прокатит

а почему не прокатит?
PHP:
скопировать код в буфер обмена
  1. $str = 'т5';
  2. echo strlen($str); // > 3
  3. echo $str[2]; // > 5

strlen показывает 3 что значит что "т" это 2 байта, а цифра всего 1. Обращение по индексу выводит корректно цифру.
6. LIME - 07 Апреля, 2015 - 13:07:04 - перейти к сообщению
OrmaJever да
если учитывать что каждый кириллический символ это 2 байта - 2 индекса массива
а как разбить произвольную строку не зная заранее последовательности символов?
PHP:
скопировать код в буфер обмена
  1. $str = $_POST['str'];
  2. echo $str[2];// какой символ выведет? уверен что не сломанный? ты чет загнался)) кофе еще не пил?))

(Добавление)
хотя даже при разбиении по регулярке придется учитывать приведение типов к булевому
esterio пишет:
$str[$i] >= 0
подводный камень без явного приведения
7. MADONZY - 08 Апреля, 2015 - 11:20:27 - перейти к сообщению
Как сказал esterio лучшим и наиболее быстрым подходом будет:

Регулярка в данном случае совершенно не требуется и более того не рекомендуется.

OrmaJever, LIME, прокатит, но не так как вы это написал. Забыли о http://php.net/manual/en/ref.mbstring.php

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

зачем? сейчас 21 век, preg_replace() использует PCRE, а значит доступен модификатор (regex pattern modifier) "u" который решит проблему.
8. LIME - 08 Апреля, 2015 - 15:13:44 - перейти к сообщению
MADONZY дурак тыУлыбка
Любой символ больше ноляУлыбка
(Добавление)
Ну тоесть любой не приводящийся к false
(Добавление)
MADONZY пишет:
более того не рекомендуется
кем?УлыбкаУлыбкаУлыбка
9. MADONZY - 08 Апреля, 2015 - 17:43:30 - перейти к сообщению
LIME пишет:
MADONZY дурак ты

сам ты дурак Улыбка
LIME пишет:
Любой символ больше ноля

да что ты говоришь))) Может в С да, но мы говорим о PHP.

LIME пишет:
Ну тоесть любой не приводящийся к false

ни один символ при сравненни с числом никогда не приведется к false. Преобразование будет в int, в данном случае в 0 (символы '1'-'9' будут преобразованы в свои целочисленные соответствия).
LIME пишет:
кем?

Мною Улыбка Использование регулярных выражений для такой банальной задачи... не смешите! Функция str_replace() на 61.56% более производительная чем preg_replace() (даже без учета регулярок). Ещё лучше использовать strtr() (она на 9.76% быстрее чем str_replace()), но в данном случае она к сожелению не подойдёт.
10. LIME - 08 Апреля, 2015 - 18:30:37 - перейти к сообщению
MADONZY пишет:
сам ты дурак
эээм...не совсем))я может и не правильно выразился насчет
LIME пишет:
Любой символ больше ноля

но
esterio пишет:
$str[$i] >= 0

MADONZY пишет:
Функция str_replace() на 61.56% более производительная чем preg_replace()
совершенно не верно
вообще это сильно зависит от шаблона
в простейшем шаблоне они сильно сравнимы по скорости
MADONZY пишет:
Мною
ага)) помню я твои вопросы))
как-то не очень впечатляет твоя рекомендация)
11. MADONZY - 08 Апреля, 2015 - 20:44:22 - перейти к сообщению
LIME, с моих старых вопросов, которые ты помнишь, много времени прошло и я, как и все, много чему научился. Если я что-то пишу, значит я это не с воздуха взял, а с достоверных источников. К тому-же сам тестировал и действительно разница есть и почему бы не последовать этому микро-производительному решению дабы еще на 1 микросекунду ускорить программу. Я хотел помочь, но вижу что ты начинаешь переходить на личное, а я не хочу принимать в этом участие.
12. LIME - 08 Апреля, 2015 - 21:56:33 - перейти к сообщению
То есть мой вардамп ложь?
А если нет то почему бы просто не принять истину
И на личности я перешел зря, просто выбесило твое безапеляционное 'щас я напишу что вы все офигеете'
А тесты по поводу быстрадействия это еще надо посмотреть как ты их делал
Уже делали тут их
Причем я утверждал то же что ты сейчас
13. MADONZY - 08 Апреля, 2015 - 22:05:15 - перейти к сообщению
LIME пишет:
То есть мой вардамп ложь?

твой var_dump всегда вернет истину, так как все кроме '1'-'9' приведется к 0.
LIME пишет:
А тесты по поводу быстрадействия это еще надо посмотреть как ты их делал

вот так:
PHP:
скопировать код в буфер обмена
  1. define('LOOP',1000000);
  2.  
  3. function f1() {
  4.   for($i=0; $i<LOOP; ++$i) {
  5.     str_replace('_', '-', 'parse-url-without-regular-expression');
  6.   }
  7. }
  8. function f2() {
  9.   for($i=0; $i<LOOP; ++$i) {
  10.     preg_replace('/_/', '-', 'parse-url-without-regular-expression');
  11.   }
  12. }
  13. $start = microtime(true);
  14. f1();
  15. $stop = microtime(true);
  16. $time1 = $stop - $start;
  17.  
  18. $start = microtime(true);
  19. f2();
  20. $stop = microtime(true);
  21. $time2 = $stop - $start;
  22.  
  23. echo $time1 . "\t";
  24. echo $time2 . "\n";
14. LIME - 08 Апреля, 2015 - 22:09:26 - перейти к сообщению
MADONZY пишет:
твой var_dump всегда вернет истину
так а я очем?УлыбкаУлыбкаУлыбка
а по поводу теста следующее
запускай их в разных процессах
Для разного размера текста
Может и докажешьУлыбка
Было бы интересно посмотреть результаты
И да....результаты приведи наверноеУлыбка
(Добавление)
А...еще память пиковою замерь
Регулярки ее жрутУлыбка
15. MADONZY - 08 Апреля, 2015 - 23:24:20 - перейти к сообщению
LIME пишет:
запускай их в разных процессах
Было бы интересно посмотреть результаты


PHP 5.5
preg_replace - 3.9303209781647
str_replace - 2.359335899353
Разница ~49.95%

 

Powered by ExBB FM 1.0 RC1