Переместить родительские элементы массива PHP, чтобы они стали дочерними

#php #arrays

#php #массивы

Вопрос:

У меня есть многомерный PHP-массив, подобный следующему:

   Array(
    [id] => lO2riJGekyHmjvFbASTa
    [word] => abc
    [product_id] => 1
    [variation] => Array(
      [attribute_1] => attribute-1
      [attribute_2] => attribute-2
      [attribute_3] => attribute-3
    )
  )
  

Что мне нравится, так это переместить первые два элемента ‘id’ и ‘word’ в качестве первых двух дочерних элементов элемента ‘variation’, чтобы массив выглядел так:

   Array(
    [product_id] => 1
    [variation] => Array(
      [id] => lO2riJGekyHmjvFbASTa
      [word] => abc
      [attribute_1] => attribute-1
      [attribute_2] => attribute-2
      [attribute_3] => attribute-3
    )
  )
  

Как я могу этого добиться?
Большое спасибо!

Комментарии:

1. если я понимаю, вы хотите создать другой массив, подобный sencond, который вы монтировали !??

Ответ №1:

Просто, просто назначьте их variation , а затем unset оригиналы:

 $array['variation']['id'] = $array['id'];
$array['variation']['word'] = $array['word'];
unset($array['id'], $array['word']);
  

Ответ №2:

Я также видел короткий ответ, данный AbraCadaver выше, и он уже должен вам помочь. И если вы не хотите менять положение массива, пожалуйста, выполните следующий код один раз и попробуйте.

 <?php

$arr = array("id" => "lO2riJGekyHmjvFbASTa",
    "word" => "abc",
    "product_id" => "1",
  'variation' => array('attribute_1' => "attribute-1",'attribute_2' => "attribute-2",'attribute_3' => "attribute-3")
);

foreach($arr as $id => $val){
    if($id == "word"){
        array_unshift($arr['variation'], $arr['word']);
    }
}

foreach($arr as $id => $val){
    if($id == "id"){
        array_unshift($arr['variation'], $arr['id']);
    }
}


function replaceArrayKey($array, $oldKey, $newKey){
    //If the old key doesn't exist, we can't replace it...
    if(!isset($array[$oldKey])){
        return $array;
    }
    //Get a list of all keys in the array.
    $arrayKeys = array_keys($array);
    //Replace the key in our $arrayKeys array.
    $oldKeyIndex = array_search($oldKey, $arrayKeys);
    $arrayKeys[$oldKeyIndex] = $newKey;
    //Combine them back into one array.
    $newArray =  array_combine($arrayKeys, $array);
    return $newArray;
}
$variationNew = replaceArrayKey($arr['variation'], 0, 'id');
$variationNew = replaceArrayKey($variationNew, 1, 'word');


unset($arr['id']);
unset($arr['word']);

$arr['variation'] = $variationNew;
echo "<pre>"; print_r($arr);


?>