矩阵中每一行的最小和最大数

时间:2019-10-18 07:54:46

标签: php arrays matrix

我有矩阵,其想法是编写一个代码,该代码给出每一行的最大和最小数,而没有任何功能,只是纯逻辑。 例如:

最大数字应为: 567、789、900、906、897

最小数字应为: 45、100、191、323、101

[45, 456, 321, 344, 567],
[100, 434, 173, 400, 789],
[191, 211, 457, 809, 900],
[431, 323, 432, 805, 906],
[708, 232, 897, 101, 696]
$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$rows = 5;
$cols = 5;

$intValue = 1;

$max = $arrNxm[0][0];

for($row = 0; $row < $rows; $row++)
{
  $max = $arrNxm[$row][0];
  for($col = 0; $col < $cols; $col++)
  {
    if($arrNxm[$row][$col] > $max)
    {
      $max = $arrNxm[$row][$col];
    }
  }
}


echo "<pre>";
var_dump($max);
echo "</pre>";

运行代码时,我只会得到一个数字,而且我无法弄清楚为获得正确的输出而应该做的事情。

4 个答案:

答案 0 :(得分:0)

您将用同一行的最大值重新写入同一变量。这就是为什么最终您总是会有一个数字的原因。

相反,您应该为结果创建一个数组,并分别存储每一行​​的最大值,如下所示:

$max = [];
for($row = 0; $row < $rows; $row++)
{
  $max[$row] = $arrNxm[$row][0];
  for($col = 0; $col < $cols; $col++)
  {
    if($arrNxm[$row][$col] > $max[$row])
    {
      $max[$row] = $arrNxm[$row][$col];
    }
  }
}

答案 1 :(得分:0)

您在这里:

current_cart.rb

输出:

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

$row = 5;
$col = 5;
$min = $max = array();

for( $i = 0; $i < $row; $i++ ) {
    $min_val = $max_val = $arrNxm[ $i ][0];    
    for( $j = 0; $j < $col; $j++ ) {
        //echo $arrNxm[ $i ][ $j ]." ";
        if( $min_val > $arrNxm[ $i ][ $j ] ) {
            $min_val = $arrNxm[ $i ][ $j ];
        }

        if( $max_val < $arrNxm[ $i ][ $j ] ) {
            $max_val = $arrNxm[ $i ][ $j ];
        }
    }
    // echo $min_val.PHP_EOL;
    $min[] = $min_val;
    $max[] = $max_val;
}
print_r( $min );
print_r( $max );

答案 2 :(得分:0)

具有2个foreach循环和两个terney ifs

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];

foreach ($arrNxm as $rkey => $row) {
    foreach ( $row as $ckey => $col) {
        // init this row in the results arrays
        if ($ckey == 0) { $min[$rkey] = PHP_INT_MAX; $max[$rkey] = 0; }              

        $min[$rkey] = $min[$rkey] > $col ? $col : $min[$rkey];
        $max[$rkey] = $max[$rkey] < $col ? $col : $max[$rkey];
    }
}

echo 'MAX' . PHP_EOL . print_r($max,1);
echo 'MIN' . PHP_EOL . print_r($min,1);

结果

MAX
Array
(
    [0] => 567
    [1] => 789
    [2] => 900
    [3] => 906
    [4] => 897
)
MIN
Array
(
    [0] => 45
    [1] => 100
    [2] => 191
    [3] => 323
    [4] => 101
)

答案 3 :(得分:0)

我想提出这个建议

$arrNxm = [
  [45, 456, 321, 344, 567],
  [100, 434, 173, 400, 789],
  [191, 211, 457, 809, 900],
  [431, 323, 432, 805, 906],
  [708, 232, 897, 101, 696]
];
$max = array();
$min = array();
foreach ($arrNxm as $key) {
    array_push($max, max($key));
    array_push($min, min($key));
}