在PHP中,usort函数有两个参数:array to sort和callback.回调也有两个参数:$ a和$ b.然后,我们以任何我们想要的方式比较这两者.它总是让我吃惊,因为这个用例usort是不是太普通了.我们通常使用相同的属性对值进行排序,或者对$ a和$ b使用相同的逻辑.例如,如果我们想按长度排序:
$animals = ['dog', 'tiger', 'giraffe', 'bear'];
usort($animals, function ($a, $b) {
return strlen($a) - strlen($b);
});
Run Code Online (Sandbox Code Playgroud)
这会奏效,但我们需要说strlen
两遍.这样说会更好:
usort($animals, function ($element) {
return strlen($element);
});
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
usort($animals, 'strlen');
Run Code Online (Sandbox Code Playgroud)
我自己编写了这种函数(使用PHP 7的好东西,但它可以很容易地改为PHP 5):
function simple_usort(array &$array, callable $callback): bool
{
return usort($array, function ($a, $b) use ($callback) {
return $callback($a) <=> $callback($b);
});
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是它不是已经在其他功能中用PHP构建了吗?如果没有,为什么PHP不支持这种非常流行和方便的排序方式?
我需要从屏幕右侧滑动某个元素(位置:固定),在那里停留一段时间再向右隐藏.我不知道宽度,这使得它更难实现.我以前用jQuery做过,但我想使用纯CSS.那可能吗?我不介意使用第三方解决方案.
这是我的jQuery代码:
$("element")
.css("right", -$("element").outerWidth() + "px")
.animate({right: 0}, 800)
.delay(3000)
.animate({right: -$("element").outerWidth() + "px"}, 800);
Run Code Online (Sandbox Code Playgroud) 有没有办法在Google Chrome中更改最大缩放级别?有时我需要查看图像的细节,特别是SVG,但Chrome的缩放最大值是500%.
此外,我想增加触摸板上缩放手势的限制,因为这低于500%.
有时我需要测试多次重定向单个请求的网站。作为一个简单的例子,我用 PHP 创建了一个示例脚本:
<?php
$n = (int) $_GET['n'] ?? 0;
if ($n < 9) header('Location: ?n=' . ($n + 1));
else echo $n;
Run Code Online (Sandbox Code Playgroud)
我发现邮递员(默认情况下?)最多允许9 个(请参阅下面的编辑)10 次重定向并在10日 11 日崩溃。当我在 Postman 中测试该脚本时,它显示了 的响应9
,这是预期的。它缺少的是整个重定向链,我有时需要检查它。
我知道有自动跟随重定向选项,但它根本不跟随重定向。
是否可以查看请求经过的所有 URL?就我而言,这将是:
http://foo.test/
http://foo.test/?n=1
http://foo.test/?n=2
...
http://foo.test/?n=8
http://foo.test/?n=9
Run Code Online (Sandbox Code Playgroud)
编辑
事实证明,我的重定向是从/directory
到 之一/directory/
,因此可能重定向的实际数量是 +1。
我知道有很多关于 Apache 不起作用的问题,但似乎没有什么能解决我的问题。我使用的是 macOS Big Sur 11.0.1。
我安装了 Apache,brew install httpd
然后brew services start httpd
. 一切似乎都很好,但是会出现http://localhost/
“无法访问此站点”错误。http://127.0.0.1/
也给出了那个错误。我的/etc/hosts
配置似乎没问题。
我不明白出了什么问题。我该怎么做才能找出问题所在?
我很好奇空合并运算符??
在默认设置中是否有填充create-react-app
。事实证明确实如此:
const App = () => {
const foo = 'custom value';
return (
<div>
{foo ?? 'default value'}
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
变成:
const App = () => {
const foo = 'custom value';
return (
<div>
{foo ?? 'default value'}
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
最有趣的部分是foo !== null && foo !== void 0 ? foo : 'default value'
,它是运算符的 polyfill ??
。虽然foo !== null
很明显,但我不太明白这foo !== void 0
部分。这是什么意思?
我检查了一下,void 0 === undefined …
我对官方 TypeScript 文档有点困惑,特别是条件类型页面。文档中有这个片段:
interface IdLabel {
id: number /* some fields */;
}
interface NameLabel {
name: string /* other fields */;
}
function createLabel(id: number): IdLabel;
function createLabel(name: string): NameLabel;
function createLabel(nameOrId: string | number): IdLabel | NameLabel; // Why?
function createLabel(nameOrId: string | number): IdLabel | NameLabel {
throw "unimplemented";
}
Run Code Online (Sandbox Code Playgroud)
我不太明白为什么它们会包含第三个重载,它与最终函数签名相同?这是一种忽视,还是有其目的?
我想完全忽略我所有 Git 存储库中的 .idea 文件夹。我希望我的存储库甚至不知道此文件夹中的文件,因此.gitignore
每次都放置文件不是一个选项。我尝试core.excludesfile
在我的全局 Git 配置中进行全局设置,但它似乎不起作用:
[core]
excludesfile = .idea/**
Run Code Online (Sandbox Code Playgroud)
另外,它会覆盖我的系统忽略的内容,例如.DS_STORE
文件。如何.idea
完全忽略文件夹而不让我知道这些文件夹的存储库?
我以为我很了解Swift中的Unicode标量,但是狗脸表情符号证明我错了.
for code in "".utf16 {
print(code)
}
Run Code Online (Sandbox Code Playgroud)
UTF-16代码是55357
和56374
.在十六进制中,那是d83d
和dc36
.
现在:
let dog = "\u{d83d}\u{dc36}"
Run Code Online (Sandbox Code Playgroud)
我没有收到带""的字符串,而是收到错误:
无效的unicode标量
我尝试使用UTF-8代码,但它也没有用.不抛出错误,但返回"ð"而不是狗脸.
这有什么不对?
我正在尝试为教育目的而用JavaScript制作JWT生成器。有一个jwt.io工具可以创建和/或验证JWT。
我正在努力使我的结果与验证器的结果匹配。问题是签名。
这是我的代码:
function base64url(input) {
return btoa(typeof input === 'string' ? input : JSON.stringify(input))
.replace(/=+$/, '')
.replace(/\+/g, '-')
.replace(/\//g, '_');
}
const JWT = {
encode(header, payload, secret) {
const unsigned = [base64url(header), base64url(payload)].join('.');
return [unsigned, base64url(sha256.hmac(secret, unsigned))].join('.');
}
};
Run Code Online (Sandbox Code Playgroud)
为了加密HMAC SHA256,我将js-sha256库与sha256.hmac(key, value)
原型一起使用。我将其与在线工具进行了比较,并且效果很好。
现在,我用以下代码对其进行测试:
const jwt = JWT.encode(
{
alg: 'HS256',
typ: 'JWT'
},
123,
'xxx'
);
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.MTIz.NzhlNTFmYzUxOGQ2YjNlZDFiOTM0ZGRhOTUwNDFmMzEwMzdlNmZkZWRhNGFlMjdlNDU3ZTZQNY
另一方面,jwt.io的结果是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.MTIz.eOUfxRjWs-0bk03alQQfMQN-b97aSuJ-RX5qXatFwbE
如您所见,JWT的三个大块中的两个在我的结果和jwt.io结果中是相同的。签名是不同的,如果您问我,它生成的签名非常短。该工具还将我自己的JWT标记为无效。
我检查了在线HMAC SHA256生成器,看起来我的代码创建了有效的签名,因此:
base64url(sha256.hmac('xxx', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.MTIz')) ===
'NzhlNTFmYzUxOGQ2YjNlZDFiOTM0ZGRhOTUwNDFmMzEwMzdlNmZkZWRhNGFlMjdlNDU3ZTZhNWRhYjQ1YzFiMQ'
Run Code Online (Sandbox Code Playgroud)
被 …