没写过 PHP ,临时需要,有 V 友能帮忙把这 20 行 JavaScript 移植到 PHP 吗?

2022-10-11 02:11:29 +08:00
 edis0n0
function convert(input = "") {
    let pdst = input.toUpperCase().trim();
    let pit = [];
    let isg = "";
    while (/[0-9A-Z]+/.exec(pdst) !== null) {
        let data = /[0-9A-Z]+/.exec(pdst);
        if (data !== null) {
            let pd = data[0];
            let pdt = pd.length;
            if (/[0-9]+/.test(pd) && pd.length < 8) isg += pd;
            if (isg.length == 15) pd = isg;
            if (isg.length >= 15) isg = "";
            if (/[0-9]+/.test(pd) && pd.length == 11 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 11));
            if (/[0-9]+/.test(pd) && pd.length == 13 && pd.substring(0, 1).toLowerCase() == "s") pit.push(pd.trim().substring(1, 13));
            if ((/[0-9]+/.test(pd) && pd.length == 15) || pd.length == 12 || pd.length == 10 || (/[0-9]+/.test(pd) && pd.length == 8)) pit.push(pd);
            pdst = pdst.substring(pdt).trim();
        }
    }
    return Array.from(new Set(pit));
}
5361 次点击
所在节点    PHP
32 条回复
phpfpm
2022-10-11 02:15:39 +08:00
直接 node 跑
edis0n0
2022-10-11 02:19:24 +08:00
@phpfpm #1 有并发要求
flyqie
2022-10-11 07:13:40 +08:00
给个示例输入?
snoopyhai
2022-10-11 08:50:59 +08:00
语法没有差太多,边查手册边翻译吧
ywmail
2022-10-11 08:55:33 +08:00
github copilot 转换的:
```
function convert($input = "") {
$pdst = strtoupper(trim($input));
$pit = [];
$isg = "";
while (preg_match_all("/[0-9A-Z]+/", $pdst) !== null) {
$data = preg_match_all("/[0-9A-Z]+/", $pdst);
if ($data !== null) {
$pd = $data[0];
$pdt = strlen($pd);
if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) < 8) $isg .= $pd;
if (strlen($isg) == 15) $pd = $isg;
if (strlen($isg) >= 15) $isg = "";
if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 11 && strtolower(substr($pd, 0, 1)) == "s") array_push($pit, substr($pd, 1, 10));
if (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 13 && strtolower(substr($pd, 0, 1)) == "s") array_push($pit, substr($pd, 1, 12));
if ((preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 15) || strlen($pd) == 12 || strlen($pd) == 10 || (preg_match_all("/[0-9]+/", $pd) && strlen($pd) == 8)) array_push($pit, $pd);
$pdst = substr($pdst, $pdt);
}
}
return array_unique($pit);
}
```
musi
2022-10-11 09:10:27 +08:00
不懂就问,这段代码的 node 并发干不过 php ?
Marinaaaa
2022-10-11 09:23:10 +08:00
@ywmail 学到了,原来 github copilot 还能这样玩, 牛哇!
kamal
2022-10-11 09:32:59 +08:00
@ywmail #5 好奇这是用什么命令做到的?
iddddg
2022-10-11 10:38:58 +08:00
@ywmail 同样好奇怎么转的,难道把 js 放在注释里?
learningman
2022-10-11 10:49:04 +08:00
helone
2022-10-11 10:54:34 +08:00
@musi PHP 大部分情况下效率其实还不错,因为底层基本都是 C 写的
musi
2022-10-11 11:00:26 +08:00
@helone #11 node 底层也是 c++,感觉从这里比较不出来什么吧
landers2015
2022-10-11 11:03:11 +08:00
@ywmail 你交了$了?还是有科学方式?求分享
zoharSoul
2022-10-11 11:19:39 +08:00
@learningman #10
怎么转的?
ljt990218
2022-10-11 11:40:20 +08:00
@landers2015 可以上万能的 tb 不到 99rmb/年
ljt990218
2022-10-11 11:41:11 +08:00
@landers2015 GitHub 有学生包 里面有 github copilot 还有其他的
liuxu
2022-10-11 11:45:06 +08:00
两个半斤八两吧,是不是 js 的正则引擎跟不上,预编译缓存一下
helone
2022-10-11 12:50:09 +08:00
@musi node 中间还有一个 v8 引擎,php 的大部分代码其实是以 c 的形式在跑的,典型的场景就是图片验证码的生成,php 写出来的生成速度比 Go 还要快几倍
lysS
2022-10-11 13:47:21 +08:00
@helone #18 这种得是官方的函数或者用插件吧、其实就是调存在的 abi 接口,自己写的代码逻辑是做不到的
xxiu
2022-10-11 14:24:03 +08:00
https://models.aminer.cn/codegeex/zh-CN/codeTranslator

function convert($input) {
$pdst = strtoupper($input);
$pit = array();
$isg = "";
while (preg_match("/[0-9A-Z]+/", $pdst, $matches)) {
$data = $matches;
if ($data) {
$pdt = strlen($data[0]);
if (strpos($data[0], "1") === 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $isg = $data[0];
if (strpos($data[0], "1")!== 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $isg = "";
if (strpos($data[0], "1") === 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $isg = "";
if ($isg!== "") $pdst = substr($pdst, 0, strpos($pdst, $isg) - 1). $isg.substr($pdst, strlen($isg));
if (strpos($data[0], "1")!== 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0]));
if (strpos($data[0], "1") === 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1);
if (strpos($data[0], "1")!== 0 && strpos($data[0], "2")!== strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0])).substr($pdst, strpos($pdst, $data[0]) + strlen($data[0]) - strlen($pdst));
if (strpos($data[0], "1")!== 0 && strpos($data[0], "2") === strlen($data[0]) - 1) $pit[] = substr($pdst, 0, strpos($pdst, $data[0]) - 1).substr($pdst, strlen($data[0])).substr($pdst, strpos($pdst, $data[0]) + strlen($data[0]) - strlen($pdst));
$pdst = substr($pdst, $pdt);
}
}
return $pit;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/885938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX