Как дела?
Я считаю, что это то, что вы ищете:
$something = false;
foreach((array)(empty($something) ? null : $something) as $k){
echo 'never enters here';
}
Вы не получаете пустой массив, потому что, когда вы устанавливаете "(массив) false", это означает, что у вас будет один элемент, и этому элементу будет присвоено значение" FALSE ".
То же самое происходит с пустой строкой (неnull one!) (array) $ emptystring вернет массив, содержащий единственный элемент, который является пустой строкой!
Аналогично выполнению:
array('');
Надеюсь, это поможет.
Ура!