foreach( if() ) 和 if( foreach() 之间的区别)


Difference between foreach( if() ) and if( foreach() )

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

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 中通常如何完成嵌套。

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

$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 原则和代码可读性,最后考虑微优化(通常不值得)。因此,这在很大程度上取决于您在这些循环中做什么,您的系统有多重要以及您的数据结构有多大。