交换矩阵中最大和最小的数字

时间:2019-09-20 10:37:50

标签: php arrays

我想编写一个交换多维数组中最大和最小数字的程序。我已将尺寸赋予一个空数组$ 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不是目标。

3 个答案:

答案 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));