Foreach +切换循环或isset($ _ REQUEST [])或Foreach + if-else

时间:2016-07-26 12:59:06

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

我想知道,在表现方面......

如果我有一个包含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),但我不确定,何时使用一个优于另一个?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

$newarray = $_REQUEST['data'];