我想做这样的事情:
foreach ($array as $key=>$value except when $key="id")
{
// whatever
}
...无需在循环体中放置“if”子句。不能保证“id”将是数组中的第一个或最后一个元素,我真的不想取消设置或切片数组,因为这将是昂贵的、丑陋的,并且不能维护原始数据。我也绝对需要在循环中同时使用键和值。
有任何想法吗?
我想做这样的事情:
foreach ($array as $key=>$value except when $key="id")
{
// whatever
}
...无需在循环体中放置“if”子句。不能保证“id”将是数组中的第一个或最后一个元素,我真的不想取消设置或切片数组,因为这将是昂贵的、丑陋的,并且不能维护原始数据。我也绝对需要在循环中同时使用键和值。
有任何想法吗?
我认为 if 子句不是这样的问题:
foreach ($array as $key => $value) {
if ($key == 'ignore_me') continue;
if ($key == 'ignore_me_2') continue;
如果你想要一个花哨的解决方案,你可以使用array_diff_key
:
$loop_array = array_diff_key($actual_array, array('ignore_me' => NULL, 'ignore_me_2' => NULL));
foreach ($loop_array as $key => $value) {
#...
使用循环内的 if 子句。它没有任何不雅之处,它是最容易阅读和理解的,也是最高效的。
如果您有很多键要跳过,您可以构建第二个哈希来测试(在 if 子句中):
foreach ($array as $key => $value) {
if (array_key_exists($key,$skip_keys)) continue;
...
}
我认为您最终会在内部循环中使用 IF 子句。在您已经提供的所有选项中,这是我唯一会用于速度和内存消耗的选项
AFAIK 你不能在没有if
循环的情况下做到这一点。
就像关键字说的那样,它是“为每个人”,而不是“为大多数人”。
编辑:就像soulmerge说的,你可以用 来做array_diff_key()
,但是如果你只是错过了一个键,那么它比仅仅把它if
放在循环中更冗长并且内存效率更低。
另一种压缩if
语句的方法是:
// ignore 1,5,8,9
foreach($arr as $key){
if(in_array($key, array(1,5,8,9)) continue;
...
}