Превратить многомерный массив в ассоциативный многомерный массив

#php #arrays #multidimensional-array #associative-array

#php #массивы #многомерный массив #ассоциативный-массив

Вопрос:

У меня такой массив

 $myArray = [
   [
       'key1' => $val1,
       'key2' => $val2,
       'key3' => $val3,
   ],
   [
       'key1' => $val4,
       'key2' => $val5,
       'key3' => $val6,
   ],
];
  

Я хочу преобразовать $myArray в ассоциативный массив, подобный этому

 $myArray = [
   $val3 => [
       'key1' => $val1,
       'key2' => $val2,
       'key3' => $val3,
   ],
   $val6 =>[
       'key1' => $val4,
       'key2' => $val5,
       'key3' => $val6,
   ],
];
  

Есть ли функция php или комбинация функций, которая делает это за вас?

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

1. Что такое $val3 и $val6 ? вы имеете в виду последний ключ каждого массива?

Ответ №1:

Однострочный, для лучшего понимания в несколько строк:

 print_r(
    array_combine(
        array_column($myArray, 'key3'),
        $myArray
    )
);
  

Ответ №2:

может быть, так?

 function conv_arr($arr) {
    $newArr = [];
    foreach ($arr as $r) {
        $newArr[end($r)] = $r;
    }
    return $newArr;
}
  

Ответ №3:

Если вы хотите получить новый array с последним key из каждого массива, попробуйте это:

 <?php
$new = array();
$myArray = [
   [
       'key1' => 1,
       'key2' => 2,
       'key3' => 3,
   ],
   [
       'key1' => 4,
       'key2' => 5,
       'key3' => 6,
   ],
];

foreach( $myArray as $array ){
    end($array);
    $key = key($array);
    $new[$array[$key]] = $array;
}

print_r($new);
  

foreach Только использование.

Ответ №4:

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

 <?php

// Your variables defined.
$val1 = 1;
$val2 = 2;
$val3 = 3;
$val4 = 4;
$val5 = 5;
$val6 = 6;

// Your input array.
$myArray = [
   [
       'key1' => $val1,
       'key2' => $val2,
       'key3' => $val3,
   ],
   [
       'key1' => $val4,
       'key2' => $val5,
       'key3' => $val6,
   ],
];

$result = [];
// Loop over each element of your input array
foreach ($myArray as $el)
    // Use the value of the last element of each child array as the index to the child.
    $result[end($el)] = $el;

var_dump($result);
  

Вывод:

 /*
array(2) {
  [3]=>
  array(3) {
    ["key1"]=>
    int(1)
    ["key2"]=>
    int(2)
    ["key3"]=>
    int(3)
  }
  [6]=>
  array(3) {
    ["key1"]=>
    int(4)
    ["key2"]=>
    int(5)
    ["key3"]=>
    int(6)
  }
}
*/