foreach(if())和if(foreach())

时间:2016-04-26 09:06:23

标签: php performance standards

我现在有一段看起来像这样的代码:

foreach ($array['subarray'] as $current) {

    if ($some_variable === 'some_string') {

        $new_array[] = $current['some_name'];

    } else {

        $new_array[] = $current['another_name'];

    }
}

同样的代码也可以这样写:

if ($some_variable === 'some_string') {

    foreach ($array['subarray'] as $current) {

        $new_array[] = $current['some_name'];

    }

} else {

    foreach ($array['subarray'] as $current) {

        $new_array[] = $current['another_name'];

    }
}

我的问题是;两者之间是否存在真正的差异,还是只是偏好?我在这里主要谈论性能,但是如果在PHP中通常如何进行嵌套有一些标准。

1 个答案:

答案 0 :(得分:4)

考虑到这些特定的例子,第二个例子在性能上更好(如果条件只使用一次),但这种方法会更好:

$new_key = 'default_value';
if ($some_variable === 'some_string') {
    $new_key = 'special_value';
}

foreach ($array['subarray'] as $current) {
    $new_array[] = $current[$new_key];
}

修改

如果差异不仅仅是关键名称,那么我会根据foreach中的代码的复杂性和相似性做出选择,首先考虑DRY原则和代码可读性以及微观优化(通常不值得)持续。因此,它在很大程度上取决于您在这些循环中所做的事情,您的系统有多重要以及您的数据结构有多大。