Как организовать многомерный массив?

Максим

Новичок
Как организовать многомерный массив?

Пример:
есть строка
name=1,name=2,name=3|age=1,age=2,age=3
я ее парсю через символы разделители (",","=","|") (на самом деле разделителей неизвестное кол-во)
соответственно размерность массива равна кол-ву разделителей.
Надо за один проход цикла раскидать все это по многомерному массиву..
Т.е. я посимвольно читаю строку, если я встречаю символ разделитель я кидаю это слово в масив..

Подскажите пожалуйста, каким образом организовать этот многомерный массив если заранее я не знаю сколько он мерный.. и что куда закидывать, а то что-то я не пойму..
 

Bitterman

Новичок
Первое, что пришло в голову.
Создаешь массив, допустим $Words
$Words = array();
Когда доходишь до разделителя, то пишешь:
$Words[разделитель][] = слово;
 

Vallar_ultra

Любитель выпить :)
При чём здесь n-мерные массивы

Я так понимаю что на выходе должно быть что-то типа
(name1,age1),(name2,age2),(name3,age3)

Так это?
 

kruglov

Новичок
В PHP нет многомерных массивов. Есть массивы массивов.
При этом в первой строке, условно, может быть 5 столбцов, а во второй - 10.
 

Максим

Новичок
пример для двух разделителей:
строка -
name=1,name=2,name=3|age=1,age=2,age=3
разделители -
"|" и "="

то массив будет :
[0]= name=1,name=2,name=3
[0][0]=name
[0][1]=1,name
[0][2]=2,name
и т.д.
 

Vallar_ultra

Любитель выпить :)
От это извращение! И нафига тебе такой АХТУНГ?
и кстати твой вариант те возможен в природе. Если $a[0] = 'name=1,name=2,name=3', то $a[0][0] - не может существовать, т.к. для этого надо $a[0] = array();

Опиши какую задачу ты решаешь таким хитрожопым способом? Я уверен на 100 процентов что есть НОРМАЛЬНОЕ решение, а ни этот ужас .
 

Максим

Новичок
Vallar_ultra
Если $a[0] = 'name=1,name=2,name=3', то $a[0][0] - не может существовать, т.к. для этого надо $a[0] = array();
--------------
Я имел что такой масив будет на выходе,
а задча в этом и состоит :) надо написать функцию которая бы и вытворяла такие чудеса акробатики да еще с минимальным использованием циклов, проходя строку только один раз..
 

Vallar_ultra

Любитель выпить :)
рекурсивно разбирай строку по делиметрам и всё у тебя будет через один проход.

А про то что ты имел ввиду - я всё-равно нихрена не понял ибо объяснений не увидел. Какой должен быть КОНЕЧНЫЙ РЕЗУЛЬТАТ?
 

Максим

Новичок
Исходные данные:
строка -
name=1,name=2,name=3|age=1,age=2,age=3
разделители -
"|" и "="

Данные на выходе:
двумерный массив -
$a[0][0]=name
$a[0][1]=1,name
$a[0][2]=2,name
и т.д.
при обращении только к первому элементу выдаст:
$a[0]=name,1,name,2,name,3
$a[1]=age,1,age,2,age,3
 

Vallar_ultra

Любитель выпить :)
Максим

Заканчивай курить то - что ты ща куришь! Умоляю!
тебе нужен результат в виду 2-мерного массива типа:
$a[0][0]=name
$a[0][1]=1,name
$a[0][2]=2,name

или одномерного типа:
$a[0]=name,1,name,2,name,3
$a[1]=age,1,age,2,age,3


Вобщем вот тебе код, разбирайся сам:
PHP:
$delims=array('|','=');

function separate($str,$delim = 0){
	global $delims;
	
	if(empty($delims[$delim])) return array();
	
	$result = array();
	
	$arr = explode($delims[$delim],$str);
	$result = $arr;
	
	foreach ($result as $i=>$a){
		$x = separate($a,$delim+1);
		if(!empty($x)){
			$result[$i] = $x;
		}
	}
	
	return $result;
}

$str    = "name=1,name=2,name=3|age=1,age=2,age=3";
$result = separate($str);
 
Сверху