Замена элемента массива

McSimm

Новичок
zerkms
а чем это числовые ключи так особенны, что для них не существует проблемы? магия чисел?
:)
 

Фанат

oncle terrible
Команда форума
zerkms
у него получается массив с исключительно числовыми ключами.
АССОЦИАТИВНЫЙ.
заканчивай тормозить.

-~{}~ 11.04.06 14:41:

в пхп все массивы ассоциативные.
если на то пошло.
и вообще мы не о том говорим - пора завязывать.
 

Falc

Новичок
zerkms
>>именно для этого пункты меню помещаем в ИНДЕКСИРОВАННЫЙ массив

ИНДЕКСИРОВАННЫЙ массив меня не устраивает, мне нужно иметь возможность обращатся к конкретным элементам массива.

>>если на выходе не получается массив с исключительно числовыми ключами (для которого проблемы не существует)

Таже самая проблема и с числовыми ключами, элемент с ключом "3" - это не означает 4-й элемент массива.
 

zerkms

TDD infected
Команда форума
PHP:
$tree[0] = array(
'name' => 'foo',
'value' => 'bar',
'child' => array(0 => array('name' => 'childname', 'value' => 'это единственный чилд для данного парента'))
);

$tree[0] = $tree[0]['child'][0];
я сделал что-то невероятное?
 

Falc

Новичок
zerkms
Если бы ключи массива для меня не несли никакой информативной нагрузки я бы сделал так как сказал Positive в первом же ответе на мой вопрос. И никакие числовые ключи мне не потребовались бы.
 

vitus

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

zerkms

TDD infected
Команда форума
любителям велосипедов с квадратными колёсами и без седушек посвящается
PHP:
function array_replace(&$array, $key, $insert) {
    $pos = array_search($key, array_keys($array));
    $first = array_slice ($array, 0, $pos, 1);
    $second = array_slice ($array,  $pos + 1 , count($array), 1);
    $array = array_merge($first, $insert, $second);
}

$a = array("a"=>'aaa', "b"=>'bbb', "c"=>'ccc', "d"=>'ddd');

array_replace($a, 'a', array("f"=>'fff'));

print_r($a);

// Array ( [f] => fff [b] => bbb [c] => ccc [d] => ddd )
 

Falc

Новичок
zerkms
Это ты просто довел до ума вариант предложеный ybilevych, только правильнее использовать сложение вместо array_merge.

Резюме такое:
Сделать можно, но достаточно громозко => не красиво.

В итоге я предпочел вариант с формированием в цикле нового дерева.
 

zerkms

TDD infected
Команда форума
Falc
если для тебя все решения приводящие к одному результату - есть один и тот же вариант, дело твоё, но я на твоём месте перечитал бы внимательно вариант от ybilevych, а затем не менее внимательно посмотрел бы приведённый мной код, прежде чем говорить, что
Это ты просто довел до ума вариант
ps: и чем же операция сложения здесь правильнее??
pps: попробуй измерь время работы запостенного мной, потом задумайся на пару секунд
 

Falc

Новичок
zerkms
После того как было написано это:
>>1. Получить ключи массива (array_keys)
>>2. Получить порядковый номер нужного ключа(array_search)
3.array_splice
По сути твой вариант ничего нового не добавил.

>>ps: и чем же операция сложения здесь правильнее??
Поекспирементируй с числовыми значениями ключей.

>>pps: попробуй измерь время работы запостенного мной, потом задумайся на пару секунд

Это собствено к чему?
 

itprog

Cruftsman
Falc
array_splice отличается от array_slice
Во многих скриптах используется много одинаковых функций/операторов, это же не значит что они выполняют одинаковую работу
 

Falc

Новичок
itprog
>>array_splice отличается от array_slice
Читать документацию я умею

>>Во многих скриптах используется много одинаковых функций/операторов, это же не значит что они выполняют одинаковую работу

Это вообще к чему?
 

itprog

Cruftsman
Falc
К тому что варианты хоть и используют одинаковые функции , алгоритмы у них РАЗНЫЕ.
 

Falc

Новичок
itprog
>>К тому что варианты хоть и используют одинаковые функции , алгоритмы у них РАЗНЫЕ

Ну хорошо уговорил разные алгоритмы, спасибо zerkms за то что зафлудил весь топик.
 

bgm

 
Что-то вроде этого? :)

PHP:
<?

$a = array("a"=>'aaa', "b"=>'bbb', "c"=>'ccc', "d"=>'ddd');
$b = array("a2"=>'aaa2', "b2"=>'bbb2', "c2"=>'ccc2', "d2"=>'ddd2');

$a_key = 'c';
$b_key = 'b2';

print_r($a);

$tmp = array_keys( $a );
$tmp[ array_search( $a_key, $tmp ) ] = $b_key;
$a = array_combine( $tmp, $a );
$a[ $b_key ] = $b[ $b_key ];

print_r($a);

?>
 

itprog

Cruftsman
Falc

а можно узнать для чего это нужно? Откуда такая проблема поползла?
 

Falc

Новичок
itprog
>>а можно узнать для чего это нужно? Откуда такая проблема поползла?

Т.е. ты даже не читал топик? Тогда о чем мы тут говорим?
 

itprog

Cruftsman
Falc
Давай не будем отвечать вопросом на вопрос..
В топике только примеры.
Еще раз спрошу, откуда _реально_ такая проблема поползла?
 

Falc

Новичок
itprog
>>Давай не будем отвечать вопросом на вопрос..
Хорошо не буду

>>Еще раз спрошу, откуда _реально_ такая проблема поползла?
Перечитай внимательно топик
 

itprog

Cruftsman
Falc
Я читаю, и вижу про дерево, но проблемы такой не вижу. Или в другом месте надо смотреть?
Думаю, если решение найдено, дальше бессмысленно флеймить
 
Сверху