Foreach+开关循环或isset($_REQUEST[])或Foreach+if else


Foreach+switch loop or isset($_REQUEST[]) or Foreach+if-else

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

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

示例:

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

方法1:

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

方法3:

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

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

您可以更一致地使用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);

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

$newarray = $_REQUEST['data'];