Создайте новый массив из ключевого списка в PHP

Мы можем улучшить решение @ Afshari, чтобы сделать действительно ленивую оценку. Мы используем метод GroupAdjacentBy , который выдает группы последовательных элементов с одним и тем же ключом:

sequence
.Select((x, i) => new { Value = x, Index = i })
.GroupAdjacentBy(x=>x.Index/3)
.Select(g=>g.Select(x=>x.Value))

Поскольку группы приводятся один за другим, это решение эффективно работает с длинными или бесконечные последовательности.

5
задан Luke Cousins 12 February 2015 в 20:21
поделиться

3 ответа

В PHP есть встроенная функция, которая позволяет такие манипуляции, то есть array_intersect_key , однако вам придется немного изменить синтаксис.

 <?php
      $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
      $selected = array_fill_keys(array('small', 'large'), null); 
      $result = array_intersect_key($sizes, $selected);
 ?>

$ result будет содержать:

    Array (
        [small] => 10px
        [large] => 13px
    );
9
ответ дан 18 December 2019 в 12:01
поделиться

Простой подход:

$sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
$chosen = array("small", "large");
$new = array();

foreach ($chosen as $key)
  $new[$key] = $sizes[$key];
1
ответ дан 18 December 2019 в 12:01
поделиться

Насколько я знаю, для этого нет функции. Самым простым способом было бы сделать что-то вроде этого, я думаю:

$chosen = array_intersect_key($sizes, array_flip(array('small', 'large')));  

Или, как вы говорите, вы можете легко написать функцию:

function array_from_keys() {
    $params = func_get_args();
    $array = array_shift($params);
    return array_intersect_key($array, array_flip($params));
}

$chosen = array_from_keys($sizes, 'small', 'large');
5
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: