'value') as $v ) {} // Unique variables. foreach ($array as $k => $v ) {} foreach ($array as $k => &$v ) {} foreach ($array as $k['key'] => $k['value'] ) {} foreach ($array as $k[$name] => $k[$value] ) {} foreach ($data as $key => [$id, [$name, $address]]) {} foreach ($data as $key => list("id" => $id, "name" => $name)) {} foreach ($array as $key => list($a) ) {} /* * The issue. */ foreach ($array as $k ) {} foreach ($array as /*comment*/ $k['key'] ) {} foreach ($array as /*comment*/ $k[/*comment*/ $name] ) {} foreach ($array as [$a] ) {} foreach ($array as list($a, $key, $b) ) {} foreach ( $data as $this->prop['key'] ) {} foreach ( $array as list( $a, $key['key'] ) ) {} // Also detect the same variable being used in combination with a reference assignment. foreach ($a as &$k) {} // Ensure non-unique variables used in foreach list assignments are disregarded. Not the concern of this sniff. foreach ($data as $key => list(, ,)) {} // Invalid, empty list. Bow out. foreach ($data as [$id => $id]) {} foreach ($data as $key => list("id" => $id, "id" => $id)) {} foreach ($data as $key => ["id" => $id, "id" => $id]) {} /* * Parse errors, not our concern. */ foreach ($array) {} // Missing "as". foreach ($array as $k => $k foreach ($array as $k => ) {}