|
|
|
| Зачем функция str_split(), ведь можно и так:
<?php
$per='Hello world!';
echo$per[0].$per[1].$per[2].$per[3].$per[4];
?>
| что выведет:
| |
|
|
|
|
|
|
|
для: Maxam
(31.10.2012 в 23:25)
| | Я вам на вскидку могу с десяток способов такого действия привести.
И что?
Как будем определять какие 9 выкинуть в помойку?
И почему вы решили, что ваш способ лучше, чем substr(), preg_match(), str_split() и т.д.?
У меня, например, очень большие сомнения на этот счет!
Больше скажу - из всех возможных вариантов вы выбрали, наверно, самый не удачный!
Например, выведите "своим" методом первое слово из словосочетания "преобразование слов", учитывая, что кодировка используется UTF-8. М? | |
|
|
|
|
|
|
|
для: Sfinks
(01.11.2012 в 00:09)
| |
<?php
$per=explode('','преобразование слов!');
// И далее...
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(01.11.2012 в 03:07)
| | Приучите себя сразу давать именам переменных что-то осмысленное, а не привыкать к шаблону - $per, это имя ни о чем не говорит.
Читая о функциях, изучайте их назначение. explode() никак нельзя сравнивать с функцией str_split(), они выполняют разные задачи. Поэтому в контексте вашего вопроса, вы заблуждаетесь, думая, что можно заменить первой вторую. | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 07:37)
| | $per для форума здесь. В скриптах все по именам :) | |
|
|
|
|
|
|
|
для: Maxam
(01.11.2012 в 15:21)
| | Если по русски, значит и пишите $переменная, а в английском это будет никак не $per. Для примера можно и проще $s - краткое от string, ну или $x - для любых неопределенных. | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 15:42)
| | Хорошо, как хотите :) | |
|
|
|
|
|
|
|
для: Maxam
(01.11.2012 в 16:11)
| | Да я никак не хочу, и РНР - что $per, что $her все равно :) Это вам скорее всего надо, потому как удобно искать потом среди не $per_1 и т.д., а среди осмысленного. | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 16:19)
| | Исправлюсь. | |
|
|
|
|
|
|
|
для: Maxam
(01.11.2012 в 03:07)
| | Во-первых, я не говорил, что вы не сможете этого сделать.
Во-вторых - да, все можно сделать разными способами. Есть даже псевдонимы функций. Например die и exit, sizeof и count и т.д. Просто потому что кому-то привычнее писать так, а не иначе.
В третьих - обратная совместимость. Я не в курсе, как обстоят дела с вашим конкретным примером, но вполне возможно, что одной из этих возможностей изначально не было. А чтоб не перестали работать скрипты написанные ранее, старые функции очень часто сохраняются.
Ну и в-четвертых - первый ваш пример не очень удачный, а вот второй - да - str_split($str) и explode('',$str) выполнят ровно одно и то же. Но мне, например, кажется, что str_split() более уместно и логично, чем какое-то непонятное разбиение по пустой строке. | |
|
|
|
|
|
|
|
для: Sfinks
(01.11.2012 в 11:01)
| | str_split($str) и explode('',$str) выполнят ровно одно и то же
Выполнит ли? | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 11:09)
| | А не проверял. Поверил на слово =) | |
|
|
|
|
|
|
|
для: Sfinks
(01.11.2012 в 11:19)
| | Данная функция требует указания разделителя, а пустая строка она и есть пустая, а следовательно не содержит требуемого. И причем тут вера? ) | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 11:23)
| | Привык, что php очень хорошо справляется с неявным преобразованием. Думал он выкрутится =) | |
|
|
|
|
|
|
|
для: Sfinks
(01.11.2012 в 12:26)
| | А что преобразовывать то? Ну преобразовали, получили 0, дальше то что? ) | |
|
|
|
|
|
|
|
для: Maxam
(31.10.2012 в 23:25)
| | Я просто хотел сказать, что не обязательно делать так, когда мне нужен первый символ строки:
<?php
$per='Text';
$split=str_split($per);
echo $split[0]; // T
?>
| , а достаточно так:
<?php
$per='Text';
echo $per[0]; // T
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(01.11.2012 в 15:23)
| | Ну а к чему тогда такой вопрос? | |
|
|
|
|
|
|
|
для: confirm
(01.11.2012 в 15:33)
| | Правильно ли понимаю. То, что символы строки можно получать как будто по элементам массива понял сам, опытным путём. В документациях не читал. Вот и уточнил. | |
|
|
|
|
|
|
|
для: Maxam
(02.11.2012 в 15:29)
| | Ну так у вас вопрос звучал - "зачем нужна?", а не "что делает?" )
В РНР есть дублирование, в том смысле, что можно было и не "раскидывать" по нескольким функция то, что каждая из них может делать. Но в данном случае упрекнуть не в чем разработчиков.
Как из вашей же темы об условии. Надо знать, что в условии if выражение вычисляется в булево значение. То есть, если мы хотим узнать истинно ли выражение, то пишем if(выражение), а если нужно узнать ложно ли выражение, то берем отрицание вычисленного булево значения - if(!выражение).
Но то, что выражение вычисляется в булево значение, совсем не означает, что нельзя получить и булево значение результата, и само значение результата. Например, нам надо вычесть из переменной $m переменную $n, и если результат более 0, то продолжить операции над результатом вычитания. Последовательно это выглядело бы так:
<?
$m = 5;
$n = 3;
if($m-$n>0) {
//получаем результат выражения
$k = $m-$n;
//используем его
echo $k;
}
|
А можно поступить иначе, причем проверим два выражения и получим два результата:
<?
$m = 5;
$n = 3;
if(($k = $m-$n)>0 && $j = $m/$n) {
//используем результат выражений,
//если булево(!) значение их равно true
echo $k * $j;
}
|
Заметьте, что первое выражение условия записано в скобки. И делается это по двум причинам:
1) нам нужно проверить больше ли нуля результат;
2) в РНР левое сравнение, и если бы мы даже не проверяли на >0, и убрали бы скобки, мы бы в качестве первого значение получили бы не результат вычитания (2), а булево значение результата (1).
В руководстве, в книгах, не всегда все описано полностью, так что нужно знать основы, возможности функций, и домысливать, домысливать, и еще раз домысливать. ) | |
|
|
|
|
|
|
|
для: confirm
(02.11.2012 в 16:13)
| | Спасибо )
Не знал, кстати, что можно так: ($k = $m-$n)>0 Теперь домыслил )
А зачем в условии $j = $m/$n? Что-то вроде делиться ли? Когда это условие может не выполниться? Только если $n равно нулю или $m или $n будут не числами. Нет? | |
|
|
|
|
|
|
|
для: Maxam
(03.11.2012 в 04:29)
| | >Не знал, кстати, что можно так
Не можно так, а так как требуется, то есть, например, зная, что отрицательные числа тоже вычисляются как true, но нам не важно это, а важно только чтобы результат был не равен 0, то достаточно было бы условия:
if($k = $m-$n) {действия}
И в скобки это выражение ставить нужно было бы в том случае, если далее в условии еще есть операции сравнения/присваивания.
>А зачем в условии $j = $m/$n? Что-то вроде делиться ли?
Это просто пример с двумя выражениями в условии. Если будет выполнено первое условие (не нулевой результат первой операции), то будут разделены переменные, и если результат деления также не будет равен 0, то будет выполнено условие проверки, и работаем с результатами выражений - переменными $k и $j. Вот весь смысл выражения.
А смысл делить строки на строки, или строки на числа? Если переменные приходят извне, и вы не уверены в их достоверности, то сперва нужно удостовериться в их типе, и только тогда можно и арифметикой заниматься с ними. | |
|
|
|