更改多维数组中值的位置

Change position of values in multidimensional array

我有以下多维数组。需要将最后一个值切换到位置 3,然后将所有其他值推到该位置下方。 当前数组

Array
    (
        [0] => Array
            (
                [0] => Vaccination
                [1] => Date of entry
                [2] => Animal
                [3] => Dog
                [4] => 246
                [5] => 4
                [6] => 984
                [7] => 102
            )

        [1] => Array
            (
                [0] => Vaccination
                [1] => Date of entry
                [2] => Animal
                [3] => Cat
                [4] => 246
                [5] => 4
                [6] => 984
                [7] => 118
            )
    )

应该输出

Array
(
    [0] => Array
        (
            [0] => Vaccination
            [1] => Date of entry
            [2] => Animal
            [3] => 102
            [4] => Dog
            [5] => 246
            [6] => 4
            [7] => 984

        )

    [1] => Array
        (
            [0] => Vaccination
            [1] => Date of entry
            [2] => Animal
            [3] => 118
            [4] => Cat
            [5] => 246
            [6] => 4
            [7] => 984
        )
)

这可以通过一些功能来完成,将来您可以输入任何多数组、要交换的位置和要交换的当前项目。有人可以帮我解决问题吗?

我尝试了以下方法,可能遇到了一些复杂的问题

function arrayPositionSwap($array, $from, $swap) {
    $s = $swap;
    foreach ($array as $key) {    
        foreach ($key as $value) {
            while ($s < $from) {
                $temp = $key[$s];
                $tempBellow = $key[$from];
                $key[$s] = $tempBellow;
                if($s == $s-1) {
                    $key[$from] = $temp;
                } else {
                    $tempb = $key[$s+1];
                    $key[$from] = $tempb;
                }
                $s++;
            }
        }
    }
} 

我会用array_pop抓取数组的最后一个元素,然后用array_splice拼接回第三个位置

例如:

$out = array_map(function ($item) {
   $lastItem = array_pop($item);
   array_splice($item, 3, 0, [$lastItem]);
   return $item;
}, $data);

输出:

array(2) {
  [0] =>
  array(8) {
    [0] =>
    string(11) "Vaccination"
    [1] =>
    string(13) "Date of entry"
    [2] =>
    string(6) "Animal"
    [3] =>
    string(3) "102"
    [4] =>
    string(3) "Dog"
    [5] =>
    string(3) "246"
    [6] =>
    string(1) "4"
    [7] =>
    string(3) "984"
  }
  [1] =>
  array(8) {
    [0] =>
    string(11) "Vaccination"
    [1] =>
    string(13) "Date of entry"
    [2] =>
    string(6) "Animal"
    [3] =>
    string(3) "118"
    [4] =>
    string(3) "Cat"
    [5] =>
    string(3) "246"
    [6] =>
    string(1) "4"
    [7] =>
    string(3) "984"
  }
}

您可以使用数组切片和数组结尾来实现同样的效果,

foreach ($arr as $key => &$value) {
    $value = array_merge(array_slice($value, 0,3), [end($value)],  
             array_slice($value, 3,-1));
}

Demo

输出:-

Array
(
    [0] => Array
        (
            [0] => Vaccination
            [1] => Date of entry
            [2] => Animal
            [3] => 102
            [4] => Dog
            [5] => 246
            [6] => 4
            [7] => 984
        )

    [1] => Array
        (
            [0] => Vaccination
            [1] => Date of entry
            [2] => Animal
            [3] => 118
            [4] => Cat
            [5] => 246
            [6] => 4
            [7] => 984
        )

)