Тип приведения не работает на массиве - PullRequest
2 голосов
/ 07 ноября 2011
foreach((array)$arr['subarr'] as &$foo)
 ....

... не работает. Выдает ошибку разбора.

Почему?

Ответы [ 4 ]

2 голосов
/ 08 ноября 2011

Почему?

Это может пролить некоторый свет на это, однако я не совсем уверен, так ли это. По крайней мере, в этом есть какой-то смысл:

Если вы используете &$foo, вы хотите присвоить псевдоним каждому значению итерации. Но когда вы приводите массив, он не существует как значение, PHP не может создать для него псевдоним (или, по крайней мере, это не имеет смысла).

Вместо того, чтобы:

foreach ((array)$arr['subarr'] as &$foo)

сделайте это, что работает и может быть тем, что вы ищете:

$subarray = (array) $arr['subarr'];
foreach ($subarray as &$foo)

или

$arr['subarr'] = (array) $arr['subarr'];
foreach ($arr['subarr'] as &$foo)
2 голосов
/ 07 ноября 2011

Вы не можете привести к массиву и одновременно использовать элементы в качестве ссылки.

Что происходит с $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 &$foo) {
    print($foo);
}
0 голосов
/ 07 ноября 2011

Если вы хотите проверить, что $arr['subarr'] является массивом, а затем пропустить блок кода, если это не так, вы можете использовать это -

if(is_array($arr['subarr'])) :
    foreach($arr['subarr'] as &$foo) :
        {Your code here}
    endforeach;
endif;
0 голосов
/ 07 ноября 2011

Что не так с:

foreach($arr['key'] as $foo){}

Или вы стремитесь к:

foreach($arr as $key => $foo)

, где $ arr - это массив, $ key - это индекс, а $ foo - этозначение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...