wolverine777
@wolverine777

Как сделать пермутацию массива по часовой стрелке?

Привет, подскажите пожалуйста куда девается последний элемент массива и почему [1] элемент такой же как и нулевой?

Мне нужно просто сделать пермутацию с 1,2,3,4,5,6,7 ---> 7,1,2,3,4,5,6

$mylist2 = array(1,2,3,4,5,6,7);

$mylist2[0]=$mylist2[(count($mylist2)-1)];

$my = $mylist2;
$i=0;

	while ($i < count($mylist2)-1) {
		
		$mylist2[$i+1] = $my[$i];
		echo"$mylist2[$i], ";
		$i++;
	}


СПАСИБО!
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
artzolin
@artzolin
php, WordPress разработка сайтов artzolin.ru
Может быть существует решение изящнее или для этого есть специальная функция. Тогда коллеги обязательно меня поправят, а пока что воспользуйтесь этим рабочим вариантом:

$mylist2 = array(1,2,3,4,5,6,7);

$count = count($mylist2);
$newArray = array();

foreach ( $mylist2 as $key => $value ) {
	if ( ($count-1) == $key ) {
		$newArray[0] = $value;
	} else {
		$newArray[$key+1] = $value;
	}
}

ksort($newArray);
var_dump(implode(", ", $newArray));
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MaLuTkA_UA
$data  = [1,2,3,4,5,6,7];
$last = array_pop($data);
array_unshift($data, $last);
echo implode(', ', $data);

P.s.: читайте доку php.net
Ответ написан
Комментировать
0xD34F
@0xD34F
function rotateArray($arr, $shift) {
  $shift %= count($arr);
  array_unshift($arr, ...array_splice($arr, -$shift));
  return $arr;
}


$arr = range(1, 7);

echo implode(', ', rotateArray($arr,  1)); // 7, 1, 2, 3, 4, 5, 6
echo implode(', ', rotateArray($arr, -3)); // 4, 5, 6, 7, 1, 2, 3
echo implode(', ', rotateArray($arr, 69)); // 2, 3, 4, 5, 6, 7, 1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 12:50
1000 руб./в час
25 апр. 2024, в 12:23
2500 руб./за проект