@Vadim1899

Перестановка элементов в многомерном массиве?

Всем привет
Имеется задача: на вход дается многомерный массив; позиция N-ого элемента; позиция, куда элемент нужно сместить.

Всю голову сломал уже, может у кого есть рабочий алгоритм?

Пробовал так:
$p1 = array_splice($temp, $posTo, 1);
$p2 = array_splice($temp, 0, $posFrom);
$temp = array_merge($p2,$p1,$temp);

но он просто свапает местами два элемента

пробовал разделять на "перенос вверх" и "перенос вниз", но всегда что-то да не работает
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
<?php

$content = [
  0 => [10,15,20],
  1 => [10,20,15],
  2 => [15,10,20],
  3 => [15,20,10],
  4 => [20,10,15],
  5 => [20,15,10],
];

$a = 1;
$b = 5;

echo json_encode($content), PHP_EOL, sprintf('$a=%d, $b=%d', $a, $b), PHP_EOL;

$raw_a = array_slice($content, 0, $a); // часть массива до $a
$raw_b = array_slice($content, $a+1, $b-$a-1); // часть массива между $a и $b
$raw_c = array_slice($content, $b+1); // часть массива после $b

// echo json_encode(['a'=>$raw_a, 'b'=>$raw_b, 'c'=>$raw_c]), PHP_EOL;

$result = array_merge($raw_a, [$content[$b]], $raw_b, [$content[$a]], $raw_c);

echo json_encode($result), PHP_EOL;


как это переделать, если $b < $a - думай сам =) есть вариант в лобовую - [$a, $b] = [$b, $a] и array_reverse на $content два раза (перед и после подстановки).. наверное, можно сделать красиво =)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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