[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обяъсните работу strtok
alex455
Все сайты с описанием этой функции - просто копии. Есть один текст и его копипастят повсюду.

Вот текст:

Цитата
strtok() разбивает строку arg1 на подстроки, используя в качесве разделителей символы из arg2. Например строку "This is an example string" можно разбить на отдельные слова.

Пример кода

<?php
$string = "This is\tan example\nstring";
/* в качестве разделителей используем пробел, табуляцию и перевод строки */
$tok = strtok($string, " \n\t");
while ($tok)
{
    echo "Word=$tok<br />";
    $tok = strtok(" \n\t");
}
?>


Как работает эта функция?

Если я делаю

<?php
$a = strtok('This is an example.', ' ');

echo $a; echo $a; echo $a; echo $a;
?>

то всегда выводится первое слово, перехода на следующие нет. Зачем она ввобще нужна?



Спустя 3 минуты, 44 секунды (15.08.2011 - 10:58) alex12060 написал(а):
alex455


$a = strtok('This is an example.', ' ');

while($a) {
echo $a.'<br />';
$a = strtok(' ');
}

Спустя 33 минуты, 24 секунды (15.08.2011 - 11:32) linker написал(а):
Она нужна для того, чтобы в цикле последовательно разбивать строку на части по разделителю. Ключевое слово тут "последовательно". explode() сразу разбивает строку на части и отдаёт массив этих частей, strtok() не сразу это делает, а постепенно, каждый раз возвращая следующую часть. Такое нужно, например, в целях экономии памяти, когда explode() может отдать слишком большой массив. Или например, когда нужно разбивать строку и останавливаться, когда будет найден какой-то маркер.

Спустя 2 минуты, 44 секунды (15.08.2011 - 11:34) alex12060 написал(а):
А еще, могут быть нужны определенные слова в тексте тебе, а если explode разбивать, то потом нужно циклом пробегать, выбирать что-то нужное и потом unset массив.

Спустя 1 час, 50 минут, 53 секунды (15.08.2011 - 13:25) alex455 написал(а):
alex12060, а что в вашем примере делает

$a = strtok(' ');

?

Спустя 17 минут, 57 секунд (15.08.2011 - 13:43) Xes написал(а):
дак разбивает по пробелу за каждую итерацию цикла пока не кончится строка.

Спустя 8 минут, 11 секунд (15.08.2011 - 13:51) alex455 написал(а):
Xes, я не понимаю - переменная здесь строка, верно?

$a = strtok('This is an example.', ' ');

$a - это не массив, это просто строка.
Строка, равная "This".

Потом мы создаём цикл и там несколько раз выполняется функция
$a = strtok(' ');

Но $a не меняется при итерациях, так как просто строка с четыремя символами. И пробела там тоже нет. Почему при каждой итерации значение $a меняется?

Спустя 15 минут, 48 секунд (15.08.2011 - 14:07) linker написал(а):
Тебе же объяснили, что в первый раз strtok() принимает строку и "запоминает" её. Далее в цикле делается разбивка по пробелу и результат возвращается в переменную $a:
$a = strtok('This is an example.', ' ');
echo $a; // Вывод "This"
$a = strtok(' ');
echo $a; // Вывод "is"
$a = strtok(' ');
echo $a; // Вывод "an"
$a = strtok(' ');
echo $a; // Вывод "example."
вот так последовательно происходит разбиение исходной строки по пробелу. Что ещё непонятного тут?
Быстрый ответ:

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