Php 矩阵中每行的最小值和最大值

Php 矩阵中每行的最小值和最大值,php,arrays,matrix,Php,Arrays,Matrix,我有一个矩阵,其思想是编写一个代码,给出每行的最大值和最小值,没有任何函数,只有纯逻辑。 例如: 最大数量应为: 567789090906897 最小值应为: 45100191323101 [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, 3

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

最大数量应为: 567789090906897

最小值应为: 45100191323101

[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];
对于($row=0;$row<$rows;$row++)
{
$max=$arrNxm[$row][0];
对于($col=0;$col<$cols;$col++)
{
如果($arrNxm[$row][$col]>$max)
{
$max=$arrNxm[$row][$col];
}
}
}
回声“;
var_dump(最大值);
回声“;

当我运行我的代码时,我只得到一个数字,我无法想象我应该做什么来获得正确的输出。

您正在用每行的最大值重写相同的变量。这就是为什么最终你总是有一个号码

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

$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 );
$max=[];
对于($row=0;$row<$rows;$row++)
{
$max[$row]=$arrNxm[$row][0];
对于($col=0;$col<$cols;$col++)
{
如果($arrNxm[$row][$col]>$max[$row])
{
$max[$row]=$arrNxm[$row][$col];
}
}
}
给你:

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

有两个foreach循环和两个terney if's

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

我想提出这个建议


首先,它是每个
的最大值和最小值,而不是
<代码>变量转储($max)的内部
中。稍有更改将跳过1次比较,将内部循环更改为
的内部
($col=1
因为您总是从0设置值,所以为什么要将其与自身进行比较。code这没关系,但是如果您仔细查看我的问题,您会发现我提到的代码只需要使用逻辑编写,而不需要任何数组函数。
Array
(
    [0] => 45
    [1] => 100
    [2] => 191
    [3] => 323
    [4] => 101
)
Array
(
    [0] => 567
    [1] => 789
    [2] => 900
    [3] => 906
    [4] => 897
)
$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
)
$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));
}