没有什么公式可以实现,公式其实就是算法,算法就可能会有循环
<?php
$arr = [
'a'=>[0,1,2,3],
'b'=>[0,1,2,3,6,7],
'c'=>[1,2,3,4,7,8,9],
'd'=>[6,8,1,3,5]
];
$arr_len = array();
foreach($arr as $item) {
$arr_len[] = count($item);
}
// 以上循环可以统计字数组的长度
$res = 0; // 要输出的结果
$c_arr_len = $arr_len;
foreach($arr_len as $k1=>$v1) {
unset($c_arr_len[$k1]); // 处理了一个数之后删除
if(count($c_arr_len)>0) {
foreach($c_arr_len as $k2=>$v2) {
$res += ($v1*$v2);
}
}
}
var_dump($res);//得到结果,其实不需要产生你那个$new数组
有2*(a1*a2 + a1*a3 + ... + a2*a3 ...) === ( a1 + a2 + a3 + ... )**2 - (a1**2 + a2**2 + ...)
然後你可以用map和reduce來避免寫循環
但是計算複雜度不變的, 還是n^2