【问题标题】:Foreach+switch loop or isset($_REQUEST[]) or Foreach+if-elseForeach+switch 循环或 isset($_REQUEST[]) 或 Foreach+if-else
【发布时间】:2016-11-30 03:26:36
【问题描述】:

我想知道,在性能方面......

如果我有一个包含 30 个元素的 $_REQUEST 数组,并且我需要使用函数抓取元素以将它们设置为新数组,那么使用多个 ISSET 与 FOREACH+SWITCH 什么时候会更好:

例子:

  • 方法 1 = 15 个元素
  • 方法 2 = 10 个元素
  • 方法 3 = 2 个元素

方法一:

foreach($_REQUEST['data'] as $key => $val)
{
    switch($key){
    case 'blah':
    $newarray['blah'] = $val;
    break;
    .....
    case 'blah2':
    .....
    case 'blah3':
    .....
    case 'blah4':
    .....
    }
}

方法三:

if(isset($_REQUEST['data']['blah'])) $newarray['blah'] = $_REQUEST['data']['blah'];
if(isset($_REQUEST['data']['blah2'])) $newarray['blah2'] = $_REQUEST['data']['blah2'];

我认为对于方法 3,使用 if(isset) 会更好,但我不确定,什么时候最好使用一个而不是另一个?

【问题讨论】:

  • 我会说 foreach + if-else。更好。
  • 方法2怎么了?

标签: php performance if-statement foreach switch-statement


【解决方案1】:

您可以更简洁地使用array_intersect_key 和每个所需键的数组:

$method1Keys = array_flip(['some','keys']);
$method2Keys = array_flip(['different','ones']);
$method3Keys = array_flip(['andsome','more']);

$method1KeyValueArray = array_intersect_key($_REQUEST['data'],$method1Keys);
$method2KeyValueArray = array_intersect_key( $_REQUEST['data'],$method2Keys);
$method3KeyValueArray = array_intersect_key( $_REQUEST['data'],$method3Keys);

【讨论】:

  • 哦,这个不错,没用过这个b4。因此,如果我只是将键添加到新数组中,我可以使用 array_intersect_key 设置它们?
  • 是的,没错。 Php 有很多有用的内置数组函数。它们通常有奇怪的名字,参数顺序也会变化,但是手册很扎实,一旦你知道它们的功能就非常有用
【解决方案2】:

在您的代码中,$newarray 将具有与源相同的键,并且您在匹配的键上设置相同的值。最快的方法:

$newarray = $_REQUEST['data'];

【讨论】:

  • 新数组是较小的数组,用于组织正在处理的数据。
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2015-07-20
  • 2014-02-11
  • 1970-01-01
  • 2018-10-22
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多