@Alexandros96
Прогер

Как сделать смену чисел по кругу на php?

Здравствуйте!

Есть 5 блоков, один из них главный (на картинке всё нарисую). Для каждого блока есть массив с данными. Нужно сделать так, чтобы при значении $i от 1 до 5 в каждые блоки должны подставляться данные.
Приведу на примере:
Сейчас это реализовано так:
switch ( {1,2,3,4,5} ) {  // меняется от 1 до 5
  case 1:
    $main = $arr['1'];
    $pos_1 = $arr['2'];
    $pos_2 = $arr['3'];
    $pos_3 = $arr['4'];
    $pos_4 = $arr['5'];
    break;
  case 2:
    $main = $arr['2'];
    $pos_1 = $arr['3'];
    $pos_2 = $arr['4'];
    $pos_3 = $arr['5'];
    $pos_4 = $arr['1'];
    break;
  case 3:
    $main = $arr['3'];
    $pos_1 = $arr['4'];
    $pos_2 = $arr['5'];
    $pos_3 = $arr['1'];
    $pos_4 = $arr['2'];
    break;
  case 4:
    $main = $arr['4'];
    $pos_1 = $arr['5'];
    $pos_2 = $arr['1'];
    $pos_3 = $arr['2'];
    $pos_4 = $arr['3'];
    break;
  case 5:
    $main = $arr['5'];
    $pos_1 = $arr['1'];
    $pos_2 = $arr['2'];
    $pos_3 = $arr['3'];
    $pos_4 = $arr['4'];
    break;
}


Графически:
5c73db0191ffe016773481.jpeg

Хочется избавиться от switch, т.к. если блоков будет больше, то кейсы разрастутся. Подскажите, какие есть пути решения?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Exomode
@Exomode
Архитектор ПО
// Заполняет массив значениями. $i это начальный индекс, $size это размер массива.
function fillArray($i, $size) {
  $j = 0;
  $result = [];
  
  while ($j < $size) {
    $result[$j++] = ++$i;

    if ($i > $size) {
      $i = 0;
    }
  }

  return $result;
}

var_dump(fillArray(2, 4)); // Выведет массив чисел вида 3 4 5 1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nvdfxx
Senior Pomidor developer
Не знаю, как на пхп синтаксически это будет выглядеть, но, думаю, проблем с этим не должно быть
let i = 2,
     myArray = [1,2,3,4,5],
     beforeArray = [],
     afterArray = [],
     finalArray: {
         i: []
     }

for(let j = 0; j < i; j++) {
   beforeArray.push(myArray[j])
}

for(let j = myArray.length - 1; j >= i ; j--) {
   afterArray.push(myArray[j])
}

finalArray.i.push(afterArray)
finalArray.i.push(beforeArray)
Ответ написан
Ваш ответ на вопрос

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

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