изменить ключ мульти-массива

#php #multidimensional-array

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

Вопрос:

Иметь массив:

  $a =array[
      "param1"=>[]
      "param2"=>[]
      "param3"=>[]
      ]
function def($param){
      return $param.date();
}
  

хотите вернуть новый массив

   $a =array[
      def(param1)=>[]
      def(param2)=>[]
      def(param3)=>[]
      ]
  

кто-нибудь знает, как это сделать?

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

1. Что произойдет, если ваш массив содержит ключи 13 и 31 as?

Ответ №1:

Вы имеете в виду что-то вроде этого?

Это довольно длинное (и грязное) предложение, и, вероятно, есть лучший способ использовать один из методов массивов PHP, но здесь идет:

 $array = array('123' => 'should be 6', '14' => 'should be 5', '12' => 'should be 3');
$new_array = array();
foreach ($array as $key => $val) {
        $key_exp = str_split($key);
        $new_key = 0;
        foreach ($key_exp as $key_int) $new_key  = $key_int;
        $new_array[$new_key] = $val;
}
  

Выдает этот результат, как и ожидалось:

 array(3) {
  [6]=>
  string(11) "should be 6"
  [5]=>
  string(11) "should be 5"
  [3]=>
  string(11) "should be 3"
}
  

Обратите внимание, что вы можете и, вероятно, столкнетесь с коллизиями ключей, используя этот метод.

Ответ №2:

Вот так:

 $out_array = array_fill_keys(array_map(function($in) {
  // do stuff you need
  return $out;
}, array_keys($in_array)), array());