javascript - 将javascript函数转换为php
问题描述
我有以下函数,它返回一个百分比数组,四舍五入为 100 或您提供给第二个参数的任何数字,我需要帮助将其转换为 PHP,因为有一些函数,如“Object.assign()”或“.map( )" 我不知道如何将它们翻译成 php。
有问题的代码如下:
function perRound(n, x) {
for (var r, e = n.length, i = e - 1, a = 0; i >= 0; i--) a += n[i];
if (0 === a) return Array.apply(null, new Array(e)).map(Number.prototype.valueOf, 0);
r = [];
var t = [], u = x / a, o = x;
for (i = e - 1; i >= 0; i--) o -= r[i] = Math.round(t[i] = n[i] * u);
if (0 != o) {
var f = {size: 0};
if ((t = t.map(function (n) {
var r = Math.floor(n);
return r === n ? n : r + .5 - n
})).forEach(o > 0 ? function (n, r) {
n <= 0 && (f[r] = !0, f.size++)
} : function (n, r) {
n >= 0 && (f[r] = !0, f.size++)
}), f.size === t.length) return r[0] += o, r;
for (var m = Object.assign({}, f); o < 0;) {
f.size === t.length && (f = Object.assign({}, m)), r[s = t.reduce(function (n, r, e) {
return !0 === f[e] ? n : (r > n.min && (n.min = r, n.minIdx = e), n)
}, {min: -.5, minIdx: 0}).minIdx] -= 1, 0 === r[s] && (m[s] = !0), f[s] = !0, f.size++, o++
}
for (; o > 0;) {
var s;
f.size === t.length && (f = {size: invalids}), r[s = t.reduce(function (n, r, e) {
return !0 === f[e] ? n : (r < n.max && (n.max = r, n.maxIdx = e), n)
}, {max: .5, maxIdx: 0}).maxIdx] += 1, f[s] = !0, f.size++, o--
}
}
return r
}
这是我到目前为止所得到的:
function perRound($n, $x){
for ($r, $e = count($n), $i = $e - 1, $a = 0; $i >= 0; $i--){$a += $n[$i];}
if (0 === $a){ return array_fill(0, $e,null);}
$r = []; $t = []; $u = $x / $a; $o = $x;
for ($i = $e - 1; $i >= 0; $i--){} $o -= $r[$i] = round($t[$i] = $n[$i] * $u);}
if (0 != $o) {
$f = array('size' => 0);
/* I don't know what to do with this part
if (($t = $t.map(function (n) {
$r = floor($n);
return $r === $n ? $n : $r + .5 - $n;
})).forEach($o > 0 ? function ($n, $r) {
$n <= 0 && ($f[$r] = !0, $f.size++)
} : function ($n, $r) {
$n >= 0 && ($f[$r] = !0, $f.size++)
}), $f.size === $t.length) return $r[0] += $o, $r;
for ($m = Object.assign({}, $f); $o < 0;) {
$f.size === $t.length && ($f = Object.assign({}, $m)), $r[$s = $t.reduce(function ($n, $r, $e) {
return !0 === $f[$e] ? $n : ($r > $n.min && ($n.min = $r, $n.minIdx = $e), $n)
}, {min: -.5, minIdx: 0}).minIdx] -= 1, 0 === $r[$s] && ($m[$s] = !0), $f[$s] = !0, $f.size++, $o++
}
for (; o > 0;) {
$s;
count($f) === count($t) && (f = {size: invalids}), r[s = t.reduce(function (n, r, e) {
return !0 === f[e] ? n : (r < n.max && (n.max = r, n.maxIdx = e), n)
}, {max: .5, maxIdx: 0}).maxIdx] += 1, f[s] = !0, f.size++, o--
}
}
*/
return $r
}
解决方案
Javascript 的“对象”实际上只不过是关联数组。
Object.assign()只是创建一个新对象,在您的情况下它是另一个对象的副本,因为它总是用一个空目标(即$m = Object.assign({}, $f)
)调用。因此,PHP 中的那些转换为基本的新任务。
除此之外,PHP 确实有一个array_map函数。
推荐阅读
- python - 从文本文件中提取 JSON 密钥,然后创建 HTTP 请求
- c - 动态读取文件,不要在 C 中使用不必要的内存
- android-emulator - adb -s
壳下午清除 - 从模拟器中删除应用程序 - dart - Dart:如何截断字符串并在字符编号后添加省略号
- python - LabelImg imgSize 数组包含 0
- node.js - $match mongodb聚合框架_mongoose中的多条件
- python - Keras——使用 LSTM 层精度低,但没有 LSTM 时精度很好
- excel - 谷歌电子表格 - 如果另一个单元格包含 N 个字符串之一,则对单元格值求和
- c# - “DataGrid”不包含“DataSource”的定义
- dart - 错误:“Toast”是从“package:easy_alert/src/provider.dart”和“package:fluttertoast/fluttertoast.dart”导入的