Abb*_*asi 5 php arrays sorting
我正在尝试编写一个函数来检查数组是否可以使用数组中的值的单个交换进行排序.
例如:array(1,3,5,3,7)必须返回true,但array(1,3,5,3,4)必须返回false.
我在下面尝试了以下代码,但我坚持下去:
$noOfIterations = 0;
for($x = 0; $x < count($a)-2; $x++) {
if($a[$x] > $a[$x+1]) {
$noOfIterations ++;
}
}
return $noOfIterations >1;
// The below solution helped as well.
//$arr = [1, 3, 5, 3, 7]; //[1, 3, 5, 3, 4]
$arr = [1, 3, 5, 3, 4];
$sortedArr = $arr;
sort($sortedArr);
print_r(array_intersect_assoc($arr,$sortedArr));
Run Code Online (Sandbox Code Playgroud)
这应该适合你:
(这里我首先制作原始数组的副本然后sort()它.之后我遍历两个数组array_map()并查看有多少位置已经改变.array_filter()我将元素排序到没有位置改变的地方.然后你可以简单地检查是否2或更多位置已更改并打印为FALSE或TRUE)
<?php
$arr = [1, 3, 5, 3, 7]; //[1, 3, 5, 3, 4]
$sortedArr = $arr;
sort($sortedArr);
$filtered = array_filter(
array_map(function($v1, $v2){
return ($v1 == $v2 ?FALSE:TRUE);
}, $arr, $sortedArr)
);
var_dump(count($filtered) > 2 ? FALSE : TRUE);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
TRUE //FALSE
Run Code Online (Sandbox Code Playgroud)