Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Зачем функция str_split() функция в PHP 5?
 
 автор: Maxam   (31.10.2012 в 23:25)   письмо автору
 
 

Зачем функция str_split(), ведь можно и так:
<?php
$per
='Hello world!';
echo
$per[0].$per[1].$per[2].$per[3].$per[4];
?>
что выведет:
Hello

  Ответить  
 
 автор: Sfinks   (01.11.2012 в 00:09)   письмо автору
 
   для: Maxam   (31.10.2012 в 23:25)
 

Я вам на вскидку могу с десяток способов такого действия привести.
И что?
Как будем определять какие 9 выкинуть в помойку?
И почему вы решили, что ваш способ лучше, чем substr(), preg_match(), str_split() и т.д.?
У меня, например, очень большие сомнения на этот счет!
Больше скажу - из всех возможных вариантов вы выбрали, наверно, самый не удачный!
Например, выведите "своим" методом первое слово из словосочетания "преобразование слов", учитывая, что кодировка используется UTF-8. М?

  Ответить  
 
 автор: Maxam   (01.11.2012 в 03:07)   письмо автору
 
   для: Sfinks   (01.11.2012 в 00:09)
 

<?php 
$per
=explode('','преобразование слов!');
// И далее...
?>

  Ответить  
 
 автор: confirm   (01.11.2012 в 07:37)   письмо автору
 
   для: Maxam   (01.11.2012 в 03:07)
 

Приучите себя сразу давать именам переменных что-то осмысленное, а не привыкать к шаблону - $per, это имя ни о чем не говорит.
Читая о функциях, изучайте их назначение. explode() никак нельзя сравнивать с функцией str_split(), они выполняют разные задачи. Поэтому в контексте вашего вопроса, вы заблуждаетесь, думая, что можно заменить первой вторую.

  Ответить  
 
 автор: Maxam   (01.11.2012 в 15:21)   письмо автору
 
   для: confirm   (01.11.2012 в 07:37)
 

$per для форума здесь. В скриптах все по именам :)

  Ответить  
 
 автор: confirm   (01.11.2012 в 15:42)   письмо автору
 
   для: Maxam   (01.11.2012 в 15:21)
 

Если по русски, значит и пишите $переменная, а в английском это будет никак не $per. Для примера можно и проще $s - краткое от string, ну или $x - для любых неопределенных.

  Ответить  
 
 автор: Maxam   (01.11.2012 в 16:11)   письмо автору
 
   для: confirm   (01.11.2012 в 15:42)
 

Хорошо, как хотите :)

  Ответить  
 
 автор: confirm   (01.11.2012 в 16:19)   письмо автору
 
   для: Maxam   (01.11.2012 в 16:11)
 

Да я никак не хочу, и РНР - что $per, что $her все равно :) Это вам скорее всего надо, потому как удобно искать потом среди не $per_1 и т.д., а среди осмысленного.

  Ответить  
 
 автор: Maxam   (01.11.2012 в 22:33)   письмо автору
 
   для: confirm   (01.11.2012 в 16:19)
 

Исправлюсь.

  Ответить  
 
 автор: Sfinks   (01.11.2012 в 11:01)   письмо автору
 
   для: Maxam   (01.11.2012 в 03:07)
 

Во-первых, я не говорил, что вы не сможете этого сделать.

Во-вторых - да, все можно сделать разными способами. Есть даже псевдонимы функций. Например die и exit, sizeof и count и т.д. Просто потому что кому-то привычнее писать так, а не иначе.

В третьих - обратная совместимость. Я не в курсе, как обстоят дела с вашим конкретным примером, но вполне возможно, что одной из этих возможностей изначально не было. А чтоб не перестали работать скрипты написанные ранее, старые функции очень часто сохраняются.

Ну и в-четвертых - первый ваш пример не очень удачный, а вот второй - да - str_split($str) и explode('',$str) выполнят ровно одно и то же. Но мне, например, кажется, что str_split() более уместно и логично, чем какое-то непонятное разбиение по пустой строке.

  Ответить  
 
 автор: confirm   (01.11.2012 в 11:09)   письмо автору
 
   для: Sfinks   (01.11.2012 в 11:01)
 

str_split($str) и explode('',$str) выполнят ровно одно и то же

Выполнит ли?

  Ответить  
 
 автор: Sfinks   (01.11.2012 в 11:19)   письмо автору
 
   для: confirm   (01.11.2012 в 11:09)
 

А не проверял. Поверил на слово =)

  Ответить  
 
 автор: confirm   (01.11.2012 в 11:23)   письмо автору
 
   для: Sfinks   (01.11.2012 в 11:19)
 

Данная функция требует указания разделителя, а пустая строка она и есть пустая, а следовательно не содержит требуемого. И причем тут вера? )

  Ответить  
 
 автор: Sfinks   (01.11.2012 в 12:26)   письмо автору
 
   для: confirm   (01.11.2012 в 11:23)
 

Привык, что php очень хорошо справляется с неявным преобразованием. Думал он выкрутится =)

  Ответить  
 
 автор: confirm   (01.11.2012 в 12:39)   письмо автору
 
   для: Sfinks   (01.11.2012 в 12:26)
 

А что преобразовывать то? Ну преобразовали, получили 0, дальше то что? )

  Ответить  
 
 автор: Maxam   (01.11.2012 в 15:23)   письмо автору
 
   для: Maxam   (31.10.2012 в 23:25)
 

Я просто хотел сказать, что не обязательно делать так, когда мне нужен первый символ строки:
<?php
$per
='Text';
$split=str_split($per);
echo 
$split[0]; // T
?>
, а достаточно так:
<?php
$per
='Text';
echo 
$per[0]; // T
?>

  Ответить  
 
 автор: confirm   (01.11.2012 в 15:33)   письмо автору
 
   для: Maxam   (01.11.2012 в 15:23)
 

Ну а к чему тогда такой вопрос?

  Ответить  
 
 автор: Maxam   (02.11.2012 в 15:29)   письмо автору
 
   для: confirm   (01.11.2012 в 15:33)
 

Правильно ли понимаю. То, что символы строки можно получать как будто по элементам массива понял сам, опытным путём. В документациях не читал. Вот и уточнил.

  Ответить  
 
 автор: confirm   (02.11.2012 в 16:13)   письмо автору
 
   для: 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)>&& $j $m/$n) {
  
//используем результат выражений,
  //если булево(!) значение их равно true
  
echo $k $j;  
}

Заметьте, что первое выражение условия записано в скобки. И делается это по двум причинам:
1) нам нужно проверить больше ли нуля результат;
2) в РНР левое сравнение, и если бы мы даже не проверяли на >0, и убрали бы скобки, мы бы в качестве первого значение получили бы не результат вычитания (2), а булево значение результата (1).

В руководстве, в книгах, не всегда все описано полностью, так что нужно знать основы, возможности функций, и домысливать, домысливать, и еще раз домысливать. )

  Ответить  
 
 автор: Maxam   (03.11.2012 в 04:29)   письмо автору
 
   для: confirm   (02.11.2012 в 16:13)
 

Спасибо )
Не знал, кстати, что можно так: ($k = $m-$n)>0 Теперь домыслил )

А зачем в условии $j = $m/$n? Что-то вроде делиться ли? Когда это условие может не выполниться? Только если $n равно нулю или $m или $n будут не числами. Нет?

  Ответить  
 
 автор: confirm   (03.11.2012 в 04:52)   письмо автору
 
   для: Maxam   (03.11.2012 в 04:29)
 

>Не знал, кстати, что можно так

Не можно так, а так как требуется, то есть, например, зная, что отрицательные числа тоже вычисляются как true, но нам не важно это, а важно только чтобы результат был не равен 0, то достаточно было бы условия:
if($k = $m-$n) {действия}
И в скобки это выражение ставить нужно было бы в том случае, если далее в условии еще есть операции сравнения/присваивания.

>А зачем в условии $j = $m/$n? Что-то вроде делиться ли?

Это просто пример с двумя выражениями в условии. Если будет выполнено первое условие (не нулевой результат первой операции), то будут разделены переменные, и если результат деления также не будет равен 0, то будет выполнено условие проверки, и работаем с результатами выражений - переменными $k и $j. Вот весь смысл выражения.

А смысл делить строки на строки, или строки на числа? Если переменные приходят извне, и вы не уверены в их достоверности, то сперва нужно удостовериться в их типе, и только тогда можно и арифметикой заниматься с ними.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования