我想编写一个交换多维数组中最大和最小数字的程序。我已将尺寸赋予一个空数组$ arrNxm,该数组的编号从1到25。 请检查我的代码并帮助我解决问题。
例如:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
新订单应为:
25 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 1
$arrNxm = array();
$intRows = 5;
$intCols = 5;
$intValue = 1;
for($row = 0; $row < $intRows; $row++)
{
for($col = 0; $col < $intCols; $col++)
{
$arrNxm[$row][$col] = $intValue++;
}
}
var_dump($arrNxm);
$intLargest = 0;
$intSmallest = $intLargest;
for($i = 0; $i < count($arrNxm); $i++)
{
foreach($arrNxm as $row)
{
foreach($row as $cell)
{
if($cell > $intLargest)
{
$intLargest = $cell;
} else if ($cell < $intSmallest)
{
$intSmallest = $cell;
}
}
}
}
echo "<pre>";
var_dump($arrNxm);
var_dump($intLargest);
echo "<br>";
var_dump($intSmallest);
我只得到反向数组,例如第一个数字数组是25 24 23 22 21
,最后一个5 4 3 2 1
不是目标。
答案 0 :(得分:0)
您可以找到最小值和最大值的索引,然后进行替换。
$array = range(1,25);
$min_index = $max_index = 0;
foreach($array as $k => $v){
if($v < $array[$min_index]){
$min_index = $k;
}
if($v > $array[$max_index]){
$max_index = $k;
}
}
$min = $array[$min_index];
$array[$min_index] = $array[$max_index];
$array[$max_index] = $min;
答案 1 :(得分:0)
您可以尝试我的代码:
$arrNxm = array();
$intRows = 5;
$intCols = 5;
$maxrow = $minrow = $maxcol = $mincol = 0;
$maxval = $minval = 0;
for($row = 0; $row < $intRows; $row++)
{
for($col = 0; $col < $intCols; $col++)
{
if($arrNxm[$row][$col] >$maxval)
{
$maxval = $arrNxm[$row][$col];
$maxrow = $row;
$maxcol = $col;
}
if($arrNxm[$row][$col] <$minval)
{
$minval = $arrNxm[$row][$col];
$minrow = $row;
$mincol = $col;
}
}
}
$arrNxm[$minrow][$mincol] = $maxval;
$arrNxm[$maxrow][$maxcol] = $minval;
答案 2 :(得分:0)
您可以使用sort()
函数对数组进行排序,仅交换数组的最小和最大位置,然后使用array_chunk()
对数组进行分块以获得所需的输出。
$arrNxm = range(1,25);
sort($arrNxm);
$number_of_element = count($arrNxm);
$temp = $arrNxm[0];
$arrNxm[0] = $arrNxm[$number_of_element-1];
$arrNxm[$number_of_element-1] = $temp;
print_r(array_chunk($arrNxm,5));