【问题标题】:How to efficiently get specific value from an array?如何有效地从数组中获取特定值?
【发布时间】:2013-10-02 18:37:37
【问题描述】:

我有一个这样的数组

array(3) {
  [0]=>
  array(2) {
    ["company"]=>
    string(15) "Company A"
    ["value"]=>
    string(6) "100"
  }
  [1]=>
  array(2) {
    ["company"]=>
    string(9) "Company B"
    ["value"]=>
    string(6) "150"
  }
  [2]=>
  array(2) {
    ["company"]=>
    string(13) "Company C"
    ["value"]=>
    string(6) "200"
  }
}

现在我想获取所有公司名称并用逗号连接它们。我可以这样走:

foreach ($array as $a) {
    $companies[] = $a['company'];
}
$company_names = implode(',', $companies);
var_dump($company_names);

打印

string(29) "Company A,Company B,Company C"

可以这么说:它有效。但这对我来说似乎效率低下,循环的那个东西。

有没有更有效的方法来达到相同的结果?例如。使用array_keys 或其他东西?

【问题讨论】:

  • 我对此表示怀疑。要获取值,您必须以一种或另一种方式循环。
  • 您是否建议内置函数不要循环?要使这被认为是低效的,您需要超过 3 家公司。一般来说,这种处理对系统要求的要求很低。如有疑问,请进行基准测试或编写缓存脚本。
  • 我同意,我认为你会做到最好。可能是您在构建数组时进行的优化。
  • @KaiQing:不,我并不是说其他​​函数不使用这个算法。我指的是我的代码的效率(=相同结果的更少行),而不是一般的实现。

标签: php arrays performance for-loop


【解决方案1】:

您可以使用array_column(),但它需要 PHP 版本高于 5.5:

$array = array_column($companies, 'company');
echo implode(',', $array);

【讨论】:

【解决方案2】:

有没有更有效的方法来达到相同的结果?

高效是一个广义的术语。我假设 efficient 表示 native。在这种情况下,是的,在 PHP 5.5+ 中,您可以将 array_column() 用作 answered by Fu Xu

否则,在 PHP 原生。虽然您可以组合数十个原生 PHP array functions 中的任何一个来实现相同的目的,但它们只是给猫剥皮的更多方法。

【讨论】:

  • 好吧,正如上面评论中提到的,在这种情况下,高效意味着:相同结果的代码行数更少。
  • 答案还是一样。更少的代码行并不总是更好。要更清晰而不是更聪明
【解决方案3】:

按照傅旭的建议使用array_column()

$array = array_column($companies, 'company');
echo implode(',', $array);

Demo!

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多