小编Rob*_*bok的帖子

PHP中有简单的用户吗?

在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不支持这种非常流行和方便的排序方式?

php arrays sorting usort

5
推荐指数
1
解决办法
193
查看次数

使用纯CSS滑动右侧效果

我需要从屏幕右侧滑动某个元素(位置:固定),在那里停留一段时间再向右隐藏.我不知道宽度,这使得它更难实现.我以前用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)

css animation slide

4
推荐指数
1
解决办法
2万
查看次数

谷歌Chrome最大缩放级别?

有没有办法在Google Chrome中更改最大缩放级别?有时我需要查看图像的细节,特别是SVG,但Chrome的缩放最大值是500%.

此外,我想增加触摸板上缩放手势的限制,因为这低于500%.

google-chrome zooming pinchzoom

4
推荐指数
1
解决办法
6023
查看次数

如何在 Postman 中查看重定向链?

有时我需要测试多次重定向单个请求的网站。作为一个简单的例子,我用 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。

php http http-redirect postman

4
推荐指数
1
解决办法
877
查看次数

本地主机不适用于 Big Sur(Apache 和 Homebrew)

我知道有很多关于 Apache 不起作用的问题,但似乎没有什么能解决我的问题。我使用的是 macOS Big Sur 11.0.1。

我安装了 Apache,brew install httpd然后brew services start httpd. 一切似乎都很好,但是会出现http://localhost/“无法访问此站点”错误。http://127.0.0.1/也给出了那个错误。我的/etc/hosts配置似乎没问题。

我不明白出了什么问题。我该怎么做才能找出问题所在?

apache macos localhost server macos-big-sur

4
推荐指数
2
解决办法
9718
查看次数

JavaScript:理解 ?? 中的 void 0 运算符填充

我很好奇空合并运算符??在默认设置中是否有填充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 …

javascript null-coalescing-operator reactjs

4
推荐指数
1
解决办法
874
查看次数

TypeScript 中是否需要完整的签名函数重载?

我对官方 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)

我不太明白为什么它们会包含第三个重载,它与最终函数签名相同?这是一种忽视,还是有其目的?

typescript

4
推荐指数
1
解决办法
61
查看次数

如何在 Git 中全局忽略目录?

我想完全忽略我所有 Git 存储库中的 .idea 文件夹。我希望我的存储库甚至不知道此文件夹中的文件,因此.gitignore每次都放置文件不是一个选项。我尝试core.excludesfile在我的全局 Git 配置中进行全局设置,但它似乎不起作用:

[core]
    excludesfile = .idea/**
Run Code Online (Sandbox Code Playgroud)

另外,它会覆盖我的系统忽略的内容,例如.DS_STORE文件。如何.idea完全忽略文件夹而不让我知道这些文件夹的存储库?

git gitignore

3
推荐指数
1
解决办法
2251
查看次数

无效的狗脸标量

我以为我很了解Swift中的Unicode标量,但是狗脸表情符号证明我错了.

for code in "".utf16 {
    print(code)
}
Run Code Online (Sandbox Code Playgroud)

UTF-16代码是5535756374.在十六进制中,那是d83ddc36.

现在:

let dog = "\u{d83d}\u{dc36}"
Run Code Online (Sandbox Code Playgroud)

我没有收到带""的字符串,而是收到错误:

无效的unicode标量

我尝试使用UTF-8代码,但它也没有用.不抛出错误,但返回"ð"而不是狗脸.

这有什么不对?

string unicode swift

3
推荐指数
1
解决办法
47
查看次数

签署JWT-我做错了吗?

我正在尝试为教育目的而用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)

被 …

javascript jwt

3
推荐指数
1
解决办法
95
查看次数