对于选项的答案为是/否的选项, 大家是会用一个checkbox还是两个radio框? 哪个会更合理? 为什么?
最近看到一篇文章是关于这个问题的,发现挺有意思的.为此做个总结记录.有人在Twitter上发布该问题的讨论,摘选了些比较有用的观点. 相信在看过这些别人的观点后, 你会更清楚在什么情况下使用哪种类会更加合适.以下为一些用户的评论观点:
  • 对于checkbox, 如果他没被选中, 那么有两种可能:一个是用户就选择否,一个是用户落了该选项. 而对于radio,否就是意味着用户选择了否
  • 如果我无法推断哪个是默认值时,我会使用2个radio.比如问题"你是中国公民吗?",此时提供是/否单选框,而不是一个checkbox
  • 看措辞: checkbox - 在陈述语句中(如'我已同意条款')
    radio - 在疑问句中(如'你阅读并同意条款了吗?')
  • radio相当于是一个必选项, 需要经过认真思考, 而checkbox更像是一个可选项,用户可以跳过不用很仔细在意.


参考文章(https://www.sarasoueidan.com/blog/one-checkbox-or-two-radio-buttons/)

怎么最简单,快速将多维数组展开平铺为一维数组? 以下为博主的总结供参考:分为平铺展开的深度为2和全部平铺展开的:

先假设有个待展开数组:
$arr = [
    'a' => [
        'a1' => 'nice100.net',
        'a2' => 'good',
    ],
    'b' => [
        'b1' => [
            'b11' => 'nice',
            'b12' => 'like',
        ]
    ]
];
  • 平铺展开的深度为2:

    //方法一
    $result = call_user_func_array('array_merge', $arr);
    //方法二(会更快)
    $result = array_merge(...array_values($arr));
    //结果输出
    Array
    (
      [a1] => nice100.net
      [a2] => good
      [b1] => Array
          (
              [b11] => nice
              [b12] => like
          )
    
    )
    
  • 全部平铺展开

    //如果要全部平铺展开,那么对于多维数组, array_merge函数就不能满足了,需要办理递归
    $re = [];
    array_walk_recursive($arr, function ($v, $k) use (&$re) {
      $re[$k] = $v;
    }, $re);
    //输入结果,注意如果存在相同的key,那么后者会覆盖前者
    Array
    (
      [a1] => nice100.net
      [a2] => good
      [b11] => nice
      [b12] => like
    )

首先说下博主出现这个报错的情形:自己使用是谷歌浏览器,访问谷歌网址, 浏览器使用了科学上网插件. 如果和我的情形一样,那么博主的办法可参考下.
经过排查发现是dns污染的问题.以下为排查教程;

  • 先确认下科学上网的插件是否正常工作
    比较简单的一个办法就是,点击该插件然后点击访问该插件的谷歌应用商店,如果能访问那么说明你的科学上网没问题, 继续下一步.
  • 修正自己电脑上的dns地址
    查看下自己电脑当前的dns服务器用的ip是多少(怎么查看因为操作系统方法也不同,故不做详述自行搜索), 建议更换为114.114.114.114 和 223.6.6.6 这两个都是国内比较大的dns服务,后者为阿里的. 更改保存后, 然后刷新下本机的dns(刷新也请自行搜索)
  • 最后但同样重要,重启下浏览器
    这里说下遇到的一个坑, 在开始遇到报错时, 我也绝得是dns的,所以一开始就dns调整为合适了,然后直接再重试访问,当然还是访问失败, 就以为不是dns的问题,即使我也想到清理了下网页缓存, 但还是同样的报错, 最后试了一大圈,才发现浏览器重启了,就能正常访问, 所以建议浏览器最好重启下再重新访问试下. 就因为没重启才导致这个小问题没能快速解决.

    第二编辑

  • 最近发现好像有些情况以上步骤也无法解决. 最后发现根本原因是科学上网插件本身有问题.用的是谷歌访问助手浏览器插件(Ghelper),发现如果换成其他科学上网插件,dns也不用刷新,就可以成功科学上网.所以如果你在尝试刷新dns后还是不能科学上网(如果不想翻墙,关闭翻墙软件就能解决这个报错了), 那么你需要怀疑下你的科学上网梯子是不是坏了(谷歌访问助手最近就是时不时抽疯).igg谷歌访问助手,亲测目前能用,有需要的也可尝试下.

November Headline: Python is unstoppable and surpasses Java

For the first time since the start of the TIOBE index nearly 20 years ago, Java and C don't make up the top 2 positions any more. C is still number one, but it is Python that claims the second position now. Some say that Python's recent surge in popularity is due to booming fields such as data mining, AI and numerical computing. But I have my own take on this. I believe that Python's popularity has to do with general demand. In the past, most programming activities were perfomed by software engineers. But programming skills are needed everywhere nowadays and there is a lack of good software developers. As a consequence, we need something simple that can be handled by non-software engineers, something easy to learn with fast edit cycles and smooth deployment. Python meets all these needs.
Some time ago I had a flat tyre and called the road patrol to help me out. The mechanic asked about my living and when I used the word "software" in my answer, he smiled and started talking very enthousiastically about his own passion: programming in Python. From that moment on, I knew Python would become ubiquitous - Paul Jansen CEO TIOBE Software

排名编程语言Ratings同比上月
1C16.21%+ 0.17%
2Python12.12%+2.27%
3Java11.68%-4.57%
4C++7.60%+1.99%
5C#4.67%+0.36%
6Visual Basic4.01%-0.22%
7JavaScript2.03%+0.10%
8PHP1.79%+0.07%
9R1.64%+0.66%
10SQL1.54%-0.15%
11Groovy1.51%+0.41%
12Perl1.51%+0.68%
13Go1.36%+0.51%
14Swift1.35%-0.31%
15Ruby1.22%-0.04%
16Assembly language1.17%+0.14%
17MATLAB1.10%+0.21%
18Delphi/Object Pascal0.86%-0.28%
19Objective-C0.84%-0.35%
20Transact-SQL0.82%+0.44%
21Classic Visual Basic0.73%--
22Logo0.72%--
23Scratch0.63%--
24PL/SQL0.62%--
25Rust0.58%--
26SAS0.58%--
27Dart0.54%--
28COBOL0.53%--
29Scala0.53%--
30Julia0.50%--
31PowerShell0.48%--
32D0.46%--
33ABAP0.43%--
34Fortran0.41%--
35Lisp0.40%--
36Kotlin0.38%--
37Lua0.37%--
38Ada0.37%--
39VHDL0.35%--
40Prolog0.35%--
41Haskell0.34%--
42Apex0.34%--
43TypeScript0.32%--
44Bash0.31%--
45Tcl0.29%--
46ML0.28%--
47Alice0.27%--
48Scheme0.26%--
49(Visual) FoxPro0.25%--
50Awk0.22%--

后50名(#51-#100)

(因差距很小,故以下按字母顺序列出)
ABC, ActionScript, Applescript, Arc, AutoLISP, bc, Bourne shell, C shell, Clojure, CoffeeScript, Common Lisp, Crystal, cT, Dylan, Elixir, Elm, Emacs Lisp, Erlang, F#, Forth, Hack, Icon, Inform, Io, J, Korn shell, LabVIEW, Ladder Logic, Lingo, LiveCode, Maple, Mercury, MQL4, NATURAL, OpenCL, OpenEdge ABL, PL/I, PostScript, Q, REXX, Ring, RPG, Simulink, Small Basic, Solidity, SPARK, Stata, Vala/Genie, VBScript, Verilog

以上数据来自权威网站TIOBE Index

复制以下代码到console控制中, 并回车执行, 然后只有使用 console.save(变量名) 命令轻松的将控制台中的变量下载到本地来. 

(function(console){
    console.save = function(data, filename){

    if(!data) {
        console.error('Console.save: No data')
        return;
    }

    if(!filename) filename = 'console.json'

    if(typeof data === "object"){
        data = JSON.stringify(data, undefined, 4)
    }

    var blob = new Blob([data], {type: 'text/json'}),
        e    = document.createEvent('MouseEvents'),
        a    = document.createElement('a')

    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl =  ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
 }
})(console)

其实在console控制台,也可以使用copy(变量名)来复制变量到剪切板上.copy命令也很方便

注意:
有些情况下使用copy命令复制数组变量总是得到空数组, 那么建议使用对象类型, 使用对象类型一定是复制出来的.