【问题标题】:Max Must be In Array [duplicate]最大值必须在数组中[重复]
【发布时间】:2019-01-05 01:54:55
【问题描述】:

你好,我是 php 新手,我的代码有些问题

此消息错误

消息:max():当只给一个参数时,它必须是一个数组

对于 sum(value) 我没有问题。正如你在这张图片上看到的那样。 Image 1

但是,当我尝试获取最大值时,却得到了这样的错误。 image2 error message

这是我的错误脚本(用于查找最大值)

for ($i=0;$i<count($kriteria);$i++)
   {
      $pembagi[$i] = 0;
         for ($j=0;$j<count($alternatif);$j++)
            {
               $pembagi[$i] = $pembagi[$i] + max($alternatifkriteria[$j][$i]);
            }
    }

这是我查找总和(值)的好脚本

 for ($i=0;$i<count($kriteria);$i++)
    {
       $pembagi[$i] = 0;
          for ($j=0;$j<count($alternatif);$j++)
             {
                $pembagi[$i] = $pembagi[$i] + ($alternatifkriteria[$j][$i]);
             }
     }

有人可以帮助我吗?我需要得到最大值(值) 喜欢这张图片 results

这是我的数组

$kriteria = [C1,C2,C3,C4,C5,C6];
$alternatif = [ALT1,ALT2,ALT,ALT4,ALT5,ALT6,ALT7];
arrayValue = (
[ALT1][C1] = 5
[ALT1][C2] = 1
[ALT1][C3] = 5
[ALT1][C4] = 2
[ALT1][C5] = 1
[ALT1][C6] = 5
[ALT2][C1] = 2
[ALT2][C2] = 4
[ALT2][C3] = 2
[ALT2][C4] = 5
[ALT2][C5] = 4
[ALT2][C6] = 4
[ALT3][C1] = 1
[ALT3][C2] = 4
[ALT3][C3] = 2
[ALT3][C4] = 5
[ALT3][C5] = 2
[ALT3][C6] = 4
[ALT4][C1] = 2
[ALT4][C2] = 4
[ALT4][C3] = 4
[ALT4][C4] = 5
[ALT4][C5] = 4
[ALT4][C6] = 2
[ALT5][C1] = 5
[ALT5][C2] = 4
[ALT5][C3] = 4
[ALT5][C4] = 1
[ALT5][C5] = 2
[ALT5][C6] = 4
[ALT6][C1] = 4
[ALT6][C2] = 4
[ALT6][C3] = 2
[ALT6][C4] = 5
[ALT6][C5] = 2
[ALT6][C6] = 4
[ALT7][C1] = 4
[ALT7][C2] = 2
[ALT7][C3] = 2
[ALT7][C4] = 5
[ALT7][C5] = 2
[ALT7][C6] = 1
);

【问题讨论】:

  • 看起来$alternatifkriteria[$j][$i] 不是数组,而是数组中的单个值。您是否试图找到整个数组中所有值的最大值?还是每行或每列中的最大值?当只传递一个参数时,max 函数需要一个数组作为它的第一个参数(只找到一个奇异值的最大值没有多大意义)。
  • 如果您只传递一个特定值作为参数,您期望max() 返回什么? php 解释当一个参数传递时,它应该是一个数组来查找最大元素。你有其他意见吗?
  • @Nathan 我需要找到每列的最大值。我只是添加了我想要的结果。查看最新更新
  • @Alex 最重要的一点是如何获得最大值,我很困惑。
  • 提供您的阵列样本和预期结果值或输出

标签: php


【解决方案1】:

您只需在max 计算中包含现有值:

for ($i=0;$i<count($kriteria);$i++)
   {
      $pembagi[$i] = 0;
         for ($j=0;$j<count($alternatif);$j++)
            {
               $pembagi[$i] = max($pembagi[$i], $alternatifkriteria[$j][$i]);
            }
    }

更新

另一种方法是转置数组(使用array_map,如here 所述),然后您可以使用array_summax 获得每个$kriteria 值的总和和最大值:

// get the values with numeric keys...
$akv = array_values($alternatifkriteria);
// so we can unpack them to transpose the array...
$akt = array_map(null, ...$akv);
// now we can just sum and take the max of each column
$sums = array_map(function ($v) { return array_sum($v); }, $akt);
$maxs = array_map(function ($v) { return max($v); }, $akt);
print_r($sums);
print_r($maxs);

输出:

Array ( [0] => 23 [1] => 23 [2] => 21 [3] => 28 [4] => 17 [5] => 24 )
Array ( [0] => 5  [1] => 4  [2] => 5  [3] => 5  [4] => 4  [5] => 5 )

Demo on 3v4l.org

【讨论】:

    【解决方案2】:

    因为您的主要目标是显示每行的最大值,所以此代码将为您提供帮助,此代码不使用最大值,但目标与您需要的相同。

    $pembagi = array();
           for ($i=0;$i<count($kriteria);$i++)
              {
                 $pembagi [$i] = 0;
                 for ($j=0;$j<count($alternatif);$j++)
                    {
                       if ($j == 0) 
                          { 
                             $pembagi [$i] = $alternatifkriteria[$j][$i];
                          }
                       else 
                          {
                             if ($pembagi [$i] < $alternatifkriteria[$j][$i])
                                {
                                   $pembagi [$i] = $alternatifkriteria[$j][$i];
                                }
                          }
                      }
                 }
    

    【讨论】:

      【解决方案3】:

      您的目标不明确,但可能这可以帮助您向前迈出一步:

      for ($i=0;$i<count($kriteria);$i++) {
            $pembagi[$i] = max($alternatifkriteria[$i]);
      } 
      

      更新这是另一种方法

       $j = 0;
       foreach ($alternatif as $column) {
           $pembagi[$j] = max(array_column($alternatifkriteria,$column));
           $j++;
       }
      

      【讨论】:

      • 如果目标不清楚,请协助新成员改进问题。
      • 得到错误:array_column() 需要至少 2 个参数,给定 1 个
      • 错误信息:max():数组必须包含至少一个元素
      猜你喜欢
      • 2018-05-05
      • 2017-12-20
      • 1970-01-01
      • 2019-09-03
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多