|
|
|
| Есть, скажем, многомерный массив,
<?php
$arr['c1']['c2']['c3']['c4']['c5']['c6']['c7']['c8']=='string value';
?>
|
Но размерность его нефикстированна, т.е. возможна ситуация
<?php
$arr['c1']['c2']['c3']['c4']=='another string value';
?>
|
Далее, нужно проверить существование конкретного элемента. В PHP4 я делал простое условие и оно работало:
<?php
if (isset($arr['c1']['c2']['c3']['c4']['c5']['c6']['c7']['c8']))
{
....
}
?>
|
В PHP5 такой номер не проходит. Выдает ошибку "Fatal error: Cannot use string offset as an array...."
В какой-то степени оно, конечно, логично (если, например, $arr['c1']['c2']['c3']['c4']=='another string value';), но как тогда проверять?
Можно делать монстряческие конструкции вроде
<?php
if (is_array($arr['c1']) && is_array ($arr['c1']['c2']) && .... && isset($arr['c1']['c2']['c3']['c4']['c5']['c6']['c7']['c8']))
{
....
}
?>
|
но такой код просто ужасен в смысле читабельности...
Можно ли как-то по другому это делать? | |
|
|
|
|
|
|
|
для: imi
(06.04.2005 в 12:04)
| | Хм... а сейчас пытался и так и эдак, так не смог получить Fatal error: Cannot use string offset as an array... :((( У меня везде без всяких ограничений отрабатывает (PHP 5.0.3) - не могли бы вы привести сбойный участок кода? А как реагирует у вас код на empty? | |
|
|
|
|
|
|
|
для: cheops
(06.04.2005 в 12:47)
| | Вот код, приводящий к ошибке:
<?php
$arr['#']='aaa';
echo isset($arr['#']['test'][0]['#']);
?>
|
с empty() - та же ошибка | |
|
|
|
|
|
|
|
для: imi
(06.04.2005 в 13:12)
| | Мда... мистика, а вот это уже без ошибки отрабатывает
<?php
$arr['#']='aaa';
echo isset($arr['#']['test'][0]);
?>
|
и вот это тоже
<?php
$arr['#']='aaa';
echo isset($arr[0][1][7]['#']['test'][0]);
?>
|
а вот это опять сбоит
<?php
$arr[0][1][7]['#']='aaa';
echo isset($arr[0][1][7]['#']['test'][0]['#']);
?>
|
Такое ощущение, что затык на ['#']... и вообще ситуация больше на внутренний баг PHP смахивает, так как если элмента в массиве нет - функция должна просто об этом сообщать. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2005 в 22:49)
| | нет, не на ['#']... такой код тоже выдает ошибку...
<?php
$arr['c1']='aaa';
echo isset($arr['c1']['c2']['c3']['c4']);
?>
|
ладно, все понятно.
тему можно закрывать... | |
|
|
|