【问题标题】:Most optimized way to create associative array创建关联数组的最优化方式
【发布时间】:2017-10-15 17:36:27
【问题描述】:

创建关联数组的最佳(最快、最易读等)方法是什么?

上次我看到我的同事,通过以下方式创建小型 assoc 数组:

$array['is_enabled'] = false;

在代码审查中,我认为更具可读性的形式是:

$array = [
    'is_enabled' => false
];

但“可读”是主观的东西,所以它不是最好的论点。

【问题讨论】:

  • 一般当你想要一个常量数据结构时,最好用第二种形式声明。没有人对你如何创建一个空数组感兴趣,然后将它一个键一个键地拼凑起来,这只会给读者带来更大的压力。这只是我的看法。
  • 我也很确定第一种方法会生成 PHP 警告。
  • @marekpw 与 symfony 和 PHP 7.1 它不会抛出任何错误,甚至注意到。据我所知,即使是 3v4l 也应该显示一些 PHP 警告。
  • 不用担心最快。担心什么是最易读的,最能表达你的意图。
  • @AndyLester 正如我所写,第二个选项更具可读性。我发现它也比第一个更快。所以我想分享这个知识,我用我的回答提出了问题。也许有一天有人会使用这个:)

标签: php arrays optimization micro-optimization


【解决方案1】:

第一种方法3v4l link

$subscription['is_enabled'] = false;

您可以在链接中看到生成了 3 个操作的链接

number of ops:  3
compiled vars:  !0 = $subscription
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   3     0  E >   ASSIGN_DIM                                               !0, 'is_active'
         1        OP_DATA                                                  
         2      > RETURN                                                   1

平均。内存使用量为 25.15 MiB,运行时间为 0.013s(用户时间 PHP 7.1.x)。

第二种方法3v4l link

$subscription = ['is_active' => false];

现在只有 2 次操作。分配并返回。

number of ops:  2
compiled vars:  !0 = $subscription
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   3     0  E >   ASSIGN                                                   !0, 
         1      > RETURN                                                   1

平均。内存使用量为 24.40 MiB,运行时间 0.010s(用户时间 PHP 7.1.x)。

我不确定第二种方法中缺少的op_data 是什么操作。但它仍然少了一个操作,结果我们减少了近 0.8MiB 的内存使用量和约 23% 的执行时间。


所以它看起来像$array= ['key' => false];

它不仅可读性更强,而且解析器也更简单。 使用这种表示法,我们跳过了三个操作中的一个,这为我们提供了额外的空闲内存和时间。

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 2018-05-14
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多