【问题标题】:Warning Division By zero警告除以零
【发布时间】:2020-07-31 09:06:54
【问题描述】:

我正在使用 electre 方法构建支持决策系统 当我编译我的代码时,我得到了一个错误 错误是:警告除以零 这是我创建的函数

function normalisasi(){
    $array = ratarata();
    $arr = spk_rel();
    $nilai = array();
    $data = array();

    foreach ($array as $key => $value) {
        $nilai[$key]=sqrt(array_sum($value));
    }
    foreach($arr as $key => $value){                
        foreach($value as $k => $v){
           $data[$key][$k] = $v / $nilai[$k];
        }
    }
    return $data;
}

错误在

$data[$key][$k] = $v / $nilai[$k];

你能帮帮我吗?

【问题讨论】:

  • 如果$nilai[$k]为0,$data[$key][$k]应该设置什么?
  • 这表明您的数据或数据背后的逻辑存在缺陷,或两者兼而有之。先解决这个问题。 ratarata

标签: php divide-by-zero


【解决方案1】:

将any除以0时会出错。

你应该在除以 0 之前检查 $nilai[$k]。

if (!empty($nilai[$k])) {
  $data[$key][$k] = $v / $nilai[$k];
}

【讨论】:

    【解决方案2】:

    您没有指定逻辑的含义,但如果您期望 $nilai 的某些值为 0 并且您可以跳过它们,有两种方法可以实现:

    1. 检查循环内的值
        foreach($arr as $key => $value){                
            foreach($value as $k => $v){
               if ($nilai[$k]) {
                   $data[$key][$k] = $v / $nilai[$k];
               }
            }
        }
    

    $nilai[$k] 为正或负时,此表达式if ($nilai[$k]) 为真,为0 时为假。

    1. 您可以在循环之前从$nilai 数组中删除 0 个值
        foreach ($array as $key => $value) {
            $nilai[$key]=sqrt(array_sum($value));
        }
    
        $nilay = array_filter($nilay);
    
        foreach($arr as $key => $value){
            ...
        }
    
    

    在这种情况下,array_filter 在没有第二个参数的情况下调用(过滤回调)只会从作为第一个参数传递的数组中删除所有 0 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多