Многомерные массивы

leosun

Новичок
Многомерные массивы

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

array =>
1 => 'fdgfds'
2 => 'dgsdgf'
3 => array =>
a => 'gfdgfdg'
b => 'aaa'

Вот скрипт получает 3|b и значение 'new_text'
как мне обратиться к значению в ключе? Понятно что обычно это делаеться array['3']['b'] но тут нужно что бы вложенность в массив была свободной и так не пойдет, может быть и так - ['3']['b'] и так ['3'] и так ['3']['b'] ['2']['d'] ['bv'] как быть?
 

partizan

Новичок
Ну можно рекурсией извратиться, но лучше подумать, и переделать все так, чтоб не возникало такой проблемы
 

leosun

Новичок
По очереди обратиться можно - но только считать данные, а как поменять?
Рекурсия - это жесть, можно но очень извратно... А по другому похоже не получиться =((

-~{}~ 03.09.07 18:49:

foreach ($keysearch as $key=>$value){
$found = $found[$value];
}

- вот поочереди - результат значение с нужного ключа... Но обратно же не запихнуть его =(
 

Андрейка

Senior pomidor developer
leosun
а почему с извратной рекурсией получиццо обратно запихнуть, а так - нет?
 

leosun

Новичок
Да я думал, есть более быстрый способ.... Ну видемо нету его...
 

Андрейка

Senior pomidor developer
leosun
видемо пакажы более медлиный способ при катором у тебя получетса запихнуть.. ведь ты же его знаешь?
 

leosun

Новичок
Кстати - рекурсией ничерта не получиться засунуть его - знаешь как? - Код в студию!!! Получиться тоже только считать данные!
 

partizan

Новичок
Можно каждый вложенный массив делать классом, тогда в foreach-е можно идти по указателям, и в конце цикла поменять нужное значение
 

leosun

Новичок
Автор оригинала: partizan
Можно каждый вложенный массив делать классом, тогда в foreach-е можно идти по указателям, и в конце цикла поменять нужное значение
Да проблема в том что там до меня делали, у меня вообще засерилизированные данные на руках, и их нужно править - по имени( ключу) и значениею =(((
 

partizan

Новичок
Автор оригинала: leosun
Кстати - рекурсией ничерта не получиться засунуть его - знаешь как? - Код в студию!!! Получиться тоже только считать данные!
В рекурсивную ф-ю можно передавать указатель на массив
 

partizan

Новичок
Автор оригинала: leosun
Да проблема в том что там до меня делали, у меня вообще засерилизированные данные на руках, и их нужно править - по имени( ключу) и значениею =(((
Ну так собери из "засерилизированных" данных структуру с классами
 

leosun

Новичок
Автор оригинала: Андрейка
Код в студию!!! Получиться тоже только считать данные!
воот.. теперь иди изучай основы языка (в данном случае не русского, хотя его тоже б надо) http://www.php.net/manual/ru/langref.php
Понятно - свободен!!!

И так вопрос открыт - кто-нибудь знает как записать данные в многомерный массив - именя на руках список ключей и значение?

-~{}~ 03.09.07 18:59:

Автор оригинала: partizan
Ну так собери из "засерилизированных" данных структуру с классами
Спасибо, вот так и попробую!
 

leosun

Новичок
Автор оригинала: Андрейка
халявный код, держи
PHP:
foreach($fields as $f){
   $r.='["'.$f.'"]';
}
eval('$var'.$r.'="'.$value.'"');
Да-да так очень хорошо! Правда за eval меня наверно кастрируют на работе... Но попробую так впихнуть...
 

partizan

Новичок
Автор оригинала: Андрейка
халявный код, держи
PHP:
foreach($fields as $f){
   $r.='["'.$f.'"]';
}
eval('$var'.$r.'="'.$value.'"');
Никакой романтики

PHP:
	class CMy_array
	{
		var $array;
		function CMy_array($array)
		{
			$this->array = array();
			
			foreach ($array as $key=>$val)
			{
				if (is_array($val))
				{
					$this->array[$key] = new CMy_array($val);
				}
				else
				{
					$this->array[$key] = $val;
				}
			};	
		}
	};
	
		
	// $array - исходный массив	
	$root = new CMy_array($array);
	// 1 раз, для создания структуры из изсходного массива
	
	
	function change_val($root, $keysearch, $new_value)
	{
		$last_array = $root;
		foreach ($keysearch as $keyval)
		{
			if (!is_object($last_array->array[$keyval]))
			{
				$last_array->array[$keyval] = $new_value;
			}
			else
			{
				$last_array = $last_array->array[$keyval];
			}
		}
	};
 

Андрейка

Senior pomidor developer
ужас скока всего романтичного надо написать если не знаешь о существовании ссылок
 

Major

Новичок
Автор оригинала: Андрейка
халявный код, держи
PHP:
foreach($fields as $f){
   $r.='["'.$f.'"]';
}
eval('$var'.$r.'="'.$value.'"');
PHP:
foreach ($fields as $f)
{
   $r.="[$f]";
}


parse_str("var$r=$value", $var);
//Обращение к переменной производится так:
var_dump($var['var']);

//Если не указывать 2й параметр, то создастся перменна $var.
parse_str("var$r=$value");
//Обращение к переменной производится так:
var_dump($var);
Это к теме, что за использование eval() кого-то кастрируют. Можно обойтись вот такимвот образом, но это не единственный способ. Как эмулировать работу eval() средствами PHP способов куча.
 
Сверху