#php #arrays #casting
#php #массивы #Кастинг
Вопрос:
foreach((array)$arr['subarr'] as amp;$foo)
....
…не не работает. Выдает ошибку синтаксического анализа.
Почему?
Комментарии:
1. Не могли бы вы указать ошибку синтаксического анализа?
2. Ошибка синтаксического анализа: ошибка синтаксического анализа в …
3. если я удалю ссылку, это сработает. но мне нужна ссылка
4. Для чего именно приведение необходимо?
5. Мне нужно убедиться, что $arr [‘sub’] действительно является массивом, потому что иногда имеет значение false или
''
Ответ №1:
Вы не можете привести к массиву и в то же время использовать элементы в качестве ссылки.
Что происходит с $foo
ним, это действительно не массив?
Приведение применяется только к циклу.
$arr['subarr'] = array('one', 'two');
// make sure we have an array
if (!is_array($arr['subarr'])) {
$arr['subarr'] = array($arr['subarr']);
}
foreach($arr['subarr'] as amp;$foo) {
print($foo);
}
Ответ №2:
Почему?
Это может пролить некоторый свет на это, однако я не совсем уверен, так ли это. По крайней мере, это имеет некоторый смысл:
Если вы используете amp;$foo
, вы хотите присвоить псевдоним каждому значению итерации. Но поскольку вы приводите массив, он не существует как значение, PHP не может создать для него псевдоним (или, по крайней мере, это не имеет смысла).
Вместо:
foreach ((array)$arr['subarr'] as amp;$foo)
сделайте это, которое работает и может быть тем, что вы ищете:
$subarray = (array) $arr['subarr'];
foreach ($subarray as amp;$foo)
или
$arr['subarr'] = (array) $arr['subarr'];
foreach ($arr['subarr'] as amp;$foo)
Ответ №3:
Что не так с:
foreach($arr['key'] as $foo){}
Или вы стремитесь к:
foreach($arr as $key => $foo)
где $arr — это массив, $ key — это индекс, а $ foo — это значение?
Ответ №4:
Если вы хотите проверить, что $arr['subarr']
является массивом, а затем пропустить блок кода, если это не так, вы можете использовать это —
if(is_array($arr['subarr'])) :
foreach($arr['subarr'] as amp;$foo) :
{Your code here}
endforeach;
endif;
Комментарии:
1. или
endif
без точки с запятой?