Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Цивилизованный способ проверить сущесвтование элемента массива
 
 автор: imi   (06.04.2005 в 12:04)   письмо автору
 
 

Есть, скажем, многомерный массив,
<?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']))
{
....
}
?>

но такой код просто ужасен в смысле читабельности...
Можно ли как-то по другому это делать?

   
 
 автор: cheops   (06.04.2005 в 12:47)   письмо автору
 
   для: imi   (06.04.2005 в 12:04)
 

Хм... а сейчас пытался и так и эдак, так не смог получить Fatal error: Cannot use string offset as an array... :((( У меня везде без всяких ограничений отрабатывает (PHP 5.0.3) - не могли бы вы привести сбойный участок кода? А как реагирует у вас код на empty?

   
 
 автор: imi   (06.04.2005 в 13:12)   письмо автору
 
   для: cheops   (06.04.2005 в 12:47)
 

Вот код, приводящий к ошибке:
<?php
$arr
['#']='aaa';
echo isset(
$arr['#']['test'][0]['#']);
?>

с empty() - та же ошибка

   
 
 автор: cheops   (06.04.2005 в 22:49)   письмо автору
 
   для: 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 смахивает, так как если элмента в массиве нет - функция должна просто об этом сообщать.

   
 
 автор: imi   (07.04.2005 в 12:18)   письмо автору
 
   для: cheops   (06.04.2005 в 22:49)
 

нет, не на ['#']... такой код тоже выдает ошибку...
<?php
$arr
['c1']='aaa'
echo isset(
$arr['c1']['c2']['c3']['c4']);
?>

ладно, все понятно.
тему можно закрывать...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования