更改多维数组中值的位置
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));
}
输出:-
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
)
)
我有以下多维数组。需要将最后一个值切换到位置 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));
}
输出:-
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
)
)