Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Вопросы по МАССИВАМ

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 25 Июнь 2009 - 17:26

я хочу разделить массив с помощью определённых знаков, например ,:%* Для этого я использую функцию explode(). Но проблема в том, что я не знаю как сделать, чтобы разделяло при определении всех вышеперечисленных знаков строка разбивалась на массивы. Вот сам код:
<?
$string = "Bodya, Ira% Lena, Sanya, Nasya, Dima: Kolya, Katya* Tanya";
$arr = explode(',', $string);
$info = print_r($arr, true);
echo "<pre>$info</pre>";
?>
Выводится:

Array
(
[0] => Bodya
[1] => Ira% Lena
[2] => Sanya
[3] => Nasya
[4] => Dima: Kolya
[5] => Katya* Tanya
)

А я хочу:

Array
(
[0] => Bodya
[1] => Ira
[n] => Lena
[2] => Sanya
[3] => Nasya
[4] => Dima
[n] => Kolya
[5] => Katya
[n] => Tanya
)

вместо n - номер по порядку который идет

 

 

  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Вопрос про массивы
  2. Вопрос по скрипту отправки писем
  3. Убрать повторения из массива
  4. Вопрос по организации страниц
  5. Добавление в массив, не используя его напрямую

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 25 Июнь 2009 - 18:11

Banderas,
для разбиения строки по нескольким разделителям в php есть функция
strtok ($string, $tokens)
http://www.php.ru/ma...ion.strtok.html
  • 0

#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 25 Июнь 2009 - 18:26

Может я непонятно напичатал, но мне надо сконвертировать строку на массивы. Ну допустим у нас есть строка:
$string = 'Bodya, Katya, Ira% Lena: Roma';
мне надо сделать из нее масив вида:
$arr = array('Bodya', 'Katya', 'Ira', 'Lena', 'Roma');
если использовать функцию explode() в таком виде:
$arr = explode(',', $string);
то масив будет выглядить вот так:
$arr = array('Bodya', 'Katya', 'Ira% Lena: Roma');

  • 0


#4 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 25 Июнь 2009 - 18:33

Что-то вроде такого:
<?php
$string = "Bodya, Ira% Lena, Sanya, Nasya, Dima: Kolya, Katya* Tanya";
$arr = array (); 
$i = 0;
$arr[$i] = strtok($string, ",:%*");
while ($arr[$i]) {
	$i++;
	$arr[$i] = strtok(",:%*");
}
$info = print_r($arr, true);
echo "<pre>$info</pre>";
?>
еще можно пробел в разделители добавить, тогда будет делить на "Bodya", "Ira", "Lena", "Sanya"... а не на "Bodya", " Ira", " Lena", " Sanya"...
  • 0

#5 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 25 Июнь 2009 - 18:40

йопт, то это целую функцию писать надо... :)

функция неправильная..
function bexplode($string) {
$arr = array ();
$i = 0;
$arr[$i] = strtok($string, ",:%*");
while ($arr[$i]) {
	$i++;
	$arr[$i] = strtok(",:%*");
} }

  • 0


#6 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 25 Июнь 2009 - 18:43

а ты как думал?
чтоб в пхп готовые функции были на все случаи, которые тебе могут в голову стукнуть? :)
  • 0

#7 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 25 Июнь 2009 - 18:50

просто функция explode() недоработана - ИМХО! :)

пс. функцию неправильно написал, как правильно будет?
  • 0


#8 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 26 Июнь 2009 - 08:15

Если я правильно понял, то вот функция:
<?php
	
	function myExplode($str, $separators = ',:%') {
		$mas = array();
		$tok = strtok($str, $separators);
		while ($tok) {
			$mas[] = $tok;
			$tok = strtok($separators);
		}
		return $mas;
	}
	
	print_r(myExplode('Bodya, Katya, Ira% Lena: Roma'));
?>
В результате:

Array ( [0] => Bodya [1] => Katya [2] => Ira [3] => Lena [4] => Roma )


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru