Как красиво/правильно скомбинировать значения из двух массивов, один из которых короче?

Есть два массива:
$arr1 = ['a',  'b',  'c',  'd',  'e',  'f',  'g',  'h',  'i',  'j',  'k',  'l',  'm',  'n']
$arr2 = [1, 2, 3, 4];


Есть необходимость «слить» эти два массива в один,
причём, когда во втором заканчиваются значения, возвращать его к началу,
чтобы получилось так:

$result = ['a1',  'b2',  'c3',  'd4',  'e1',  'f2',  'g3',  'h4',  'i1',  'j2',  'k3',  'l4',  'm1',  'n2'];


Пока что сделала незамысловато:
$index = 0; $result = [];
foreach ($arr1 as $item) {
    if (!isset($arr2[$index])) $index = 0;
    $result[] = $item.$arr2[$index];
    $index++;
}


Но выглядит это неочень…

Как сделать лаконичнее / правильнее ?
  • Вопрос задан
  • 498 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
У вас вполне хороший код. Можно чуть изменить, полагаясь на то, что именно второй массив короче первого:
$result = [];
$limit = count($arr2);
foreach ($arr1 as $index => $item) {
    $result[] = $item . $arr2[$index % $limit];
}


Или короче, хуже, менее читаемо:
Ацкий однострочник
$result = array_map(function($item, $i) use ($arr2) {return $item . $arr2[$i % count($arr2)];}, $arr1, array_keys($arr1));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы