[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как изменить элемент многомерного массива
file_xz
Привет, есть один массив в котором находятся ключи многомерного массива, код:

$array=array('QQQ','WWW','EEE');//Ключи

$new_key='RRR';

$array2=array(//Массив в котором нужно заменить
'GOOGLE' => array(32 => 1),
'QQQ' => array('WWW' => array('EEE' => 22, 'TTT' => 33)));

Мне нужно изменить $array2['QQQ']['WWW']['EEE']=22 на $array2['QQQ']['WWW']['EEE'][$new_key]=22;

Подскажите как мне это сделать?
file_xz
Только без eval, ключи и значения разные могут быть...

$value='';
foreach($array as $v){
$value.='[\''.$v.'\']';
}
eval('$array2'.$value.'=array($new_key => 22);');
Эли4ка
$array2['QQQ']['WWW']['EEE'][$new_key]=$array2['QQQ']['WWW']['EEE'];


file_xz
гениально! видимо мы с разных планет, когда задавал другие вопросы с другого аккаунта вы тоже давали банальные ответы - не вдумываясь в суть вопроса.
Если вникнуть в данный вопрос - я вообще не знаю что за ключи будут находиться в массиве $array - если во втором сообщение я прибегнул к eval.
+ к этому в многомерном массиве может быть еще массив в данном примере это 'TTT' => 33, соответственно через foreach пробегая массив $array и изменяя каждую ячейку по очередности не подойдет, так как удалятся другие значения - в данном случае 'TTT' => 33
brevis
Как вариант:
<?php

$array=array('QQQ','WWW','EEE');//Ключи

$new_key='RRR';

$array2=array(//Массив в котором нужно заменить
'GOOGLE' => array(32 => 1),
'QQQ' => array('WWW' => array('EEE' => 22, 'TTT' => 33)));

$tmp = null;
foreach ($array as $i=>$key) {
if ($i === 0) {
$tmp = &$array2[$key];
} else {
if ($i === count($array) - 1) {
$tmp[$key] = array($new_key => $tmp[$key]);
} else {
$tmp = &$tmp[$key];
}
}

$i++;
}

print_r($array2);

https://glot.io/snippets/f2wng8ektc

_____________
Чатик в телеге
Быстрый ответ:

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