2015-12-24 4 views
4

У меня есть массив:PHP переключения двух ключей массива

$array['text6'] = array(
    'elem2' => 'text2', 
    'elem3' => 'text3', 
    'elem4' => 'text4', 
    'elem5' => 'text5' 
    'elem6' => 'text6' 
); 

И я хотел бы изменить, например text6 ключ с другим ключом таким образом:

$name_key = 'elem4'; 

// something action here 
// and final array: 

    $array['text4'] = array(
     'elem2' => 'text2', 
     'elem3' => 'text3', 
     'elem5' => 'text5' 
     'elem6' => 'text6' 
    ); 

Как Я могу это сделать? У меня есть 105 массивов и мне нужно менять каждый массив таким же образом, так что, когда массив выглядит, что:

$array['text6'] = array(
    'elem2' => 'text2', 
    'elem3' => 'text3', 
    'elem4' => 'text4', 
    'elem5' => 'text5' 
    'elem6' => 'text6' 
); 

$array['othertext6'] = array(
    'elem2' => 'othertext2', 
    'elem3' => 'othertext3', 
    'elem4' => 'othertext4', 
    'elem5' => 'othertext5' 
    'elem6' => 'othertext6' 
); 

И я хотел бы изменить главный ключ с номером ключа три (клавиша -> «elem4»), он должен сделать в каждом массиве (разные массивы beetwen только в стоимости, ключи всегда одинаковы):

$name_key = 'elem4'; 

// action... 

$array['text4'] = array(
    'elem2' => 'text2', 
    'elem3' => 'text3', 
    'elem5' => 'text5' 
    'elem6' => 'text6' 
); 

$array['othertext4'] = array(
    'elem2' => 'othertext2', 
    'elem3' => 'othertext3', 
    'elem5' => 'othertext5' 
    'elem6' => 'othertext6' 
); 

Как я могу это сделать?

+0

Это неправильный путь. Вам нужен вложенный список (дочерние узлы). – Deep

+0

Посмотрите сейчас, я отредактировал свой вопрос. Основной ключ всегда находится в массиве ('elem6' => 'text6'). Я хотел бы удалить основной ключ и изменить другой ключ из массива, а затем - удалить этот ключ из массива. – NewbieUser

+0

Пожалуйста, отметьте, какой ответ решил вашу проблему, @NewbieUser – Tim

ответ

2

Если я правильно понимаю, вы хотите установить ключ элемента в массиве на значение элемента во втором массиве, который сам является значением первого ключа в массиве верхнего уровня , Кроме того, вы хотите удалить этот элемент из массива второго уровня.

Будет ли ключ массива верхнего уровня всегда изменяться на значение второго уровня с помощью того же ключа?

То есть, будет ли «elem4» всегда быть ключом к значению, которое должно стать ключом массива верхнего уровня?

Если да, то вы можете сделать это:

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

$list = array($array['text4'], $array['text5'], ... (all your other arrays here)); 

Затем

$name_key = 'elem4'; 
foreach ($list as $k => $v) { 
    $new_key = $v[$name_key]; 
    unset ($v[$name_key]); 
    $list[$new_key] = $v; 
    unset ($list[$k]); 
} 
+1

Вместо жесткого кодирования '' elem4'', используйте '$ name_key' – Barmar

+0

Вы уверены, что это хорошее решение? Имена значений в основном массиве очень важны для меня. Думаю, в вашем решении вы удалили все ключи, да? – NewbieUser

+1

@NewbieUser. В моем решении я удаляю ключ «elem4» из каждого массива второго уровня и устанавливая ключ для этого массива в массиве верхнего уровня на значение «elem4» (или $ name_key). Если вы хотите сохранить этот элемент ('elem4') в массиве второго уровня, вы можете удалить строку: unset ($ v [$ name_key]); – Tim

Смежные вопросы