Php 警告除零

Php 警告除零,php,divide-by-zero,Php,Divide By Zero,我正在使用electre方法建立支持决策系统 当我编译代码时,我遇到了一个错误 错误是:警告除以零 这是我创建的函数 function normalisasi(){ $array = ratarata(); $arr = spk_rel(); $nilai = array(); $data = array(); foreach ($array as $key => $value) { $nilai[$key]=sqrt(array_

我正在使用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];

您能帮助我吗?

当您将任何值除以0时,您将得到一个错误

在除以0之前,应先检查$nilai[$k]

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

您没有指定逻辑是关于什么的,但是如果您希望
$nilai
的某些值为0,您可以跳过它们,有两种方法可以实现:

  • 检查循环内的值
  • foreach($arr as$key=>$value){
    foreach($k=>v的值){
    如果($nilai[$k]){
    $data[$key][$k]=$v/$nilai[$k];
    }
    }
    }
    
    $nilai[$k]
    为正或负时,此表达式
    if($nilai[$k])
    将为真,当它为0时将为假

  • 在循环之前,您可以从
    $nilai
    数组中删除0个值
  • foreach($key=>$value的数组){
    $nilai[$key]=sqrt(数组和($value));
    }
    $nilay=阵列过滤器($nilay);
    foreach($arr作为$key=>$value){
    ...
    }
    

    在这种情况下,
    array\u在没有第二个参数的情况下调用filter
    (filter callback)只会从作为第一个参数传递的数组中删除所有0值。

    如果
    $nilai[$k]
    为0,则在
    $data[$key][$k]
    中应该设置什么?这表示数据或数据背后的逻辑存在缺陷,或者两者都存在。先把它修好
    ratarata
    非常感谢