Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивные массивы 
:(
    Опции темы
Гость
Дата 30.5.2004, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 15.11.2003

Репутация: 2
Всего: 2



Имеем:

$a = array(1,2,3);
$a['a'] =& $a;

Вопрос: как узнать во время перебора элементов массива, что один из элементов и есть сам массив?

пожалуйста
array_diff_assoc()
и
foreach($a as $tmp) if ($a == $tmp) echo "match";
не предлагать.
PM MAIL   Вверх
IZ@TOP
Дата 30.5.2004, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



bool is_array($array[0])


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Guest
Дата 30.5.2004, 16:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Еще раз вопрос: как узнать во время перебора элементов массива, что один из элементов и есть сам массив?
  Вверх
IZ@TOP
Дата 31.5.2004, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата
Еще раз вопрос: как узнать во время перебора элементов массива, что один из элементов и есть сам массив?

А можно подробнее? В чем заключается проблема? Ты что копируешь сам массив в себя, и хочешь узнать не является ли текущий элемент массива его копией?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
MuToGeN
Дата 31.5.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Если $a - массив, то
Код

<?php
foreach($a as $key->$value){
 if(is_array($value)){
   echo "element '$key' is array\n";
 }else{
   echo "element '$key' is not array\n";
 }
}
?>

Да и вообще, php.net - очень полезный ресурс. Далеко не все станут все за вас расписывать.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
IZ@TOP
Дата 31.5.2004, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



MuToGeN
если бы ты глянул весь пост, ты бы увидел подобный ответ. однако этот вариант видимо ему не подходит wink.gif Там проблема в другом biggrin.gif


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
MuToGeN
Дата 31.5.2004, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Ааааааа... Ага, ясно. Сорри.
А если, собственно, сравнивать по указателю? Т.е. &$array[$key]==&$array?
Сорри, не тестил, не знаю, насколько прокатит синтаксически.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Гость
Дата 31.5.2004, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 15.11.2003

Репутация: 2
Всего: 2



синтаксически не прокатит
Добавлено @ 22:44
Цитата(IZ @ 31.5.2004, 10:41)
Цитата
Еще раз вопрос: как узнать во время перебора элементов массива, что один из элементов и есть сам массив?

А можно подробнее? В чем заключается проблема? Ты что копируешь сам массив в себя, и хочешь узнать не является ли текущий элемент массива его копией?

Всё верно
PM MAIL   Вверх
akul
Дата 4.6.2004, 16:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проблема заключается в том, что _НЕ НАДО ДЕЛАТЬ ЦИКЛИЧЕСКИХ ССЫЛОК_. Текущая проблема - наименьшая из тех, с которыми ты можешь столкнуться дальше. Поэтому думай, как переделать структуру данных.
  Вверх
HalkaR
Дата 6.6.2004, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 2
Всего: 42



Код
<?php

function view($a)
{
   echo "<ul>\n";
   foreach ($a as $key=>$val)
    {
       if(is_array($a[$key]))
        {
           echo "<li>$key</li>\n";
           view($a[$key]);
           }
       else
        {
           echo "<li>$key => $val</li>\n";
           }
       }
   echo "</ul>";
   }

$a = array("list"=>array("north"=>"Север", "west"=>"Запад", "south"=>array("1"=>"1","2"=>"2","3"=>"3"), "east"=>"Восток"),
"list2"=>array("1"=>"1000", "2"=>"2000", "3"=>"3000"),
"list3"=>"a");

view($a);

?>
Работа с рекурсивными массивами.
PM MAIL   Вверх
Гость
Дата 6.6.2004, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 15.11.2003

Репутация: 2
Всего: 2



akul а если МНЕ ОЧЕНЬ НУЖНО СДЕЛАТЬ ЦИКЛИЧЕСКУЮ ССЫЛКУ? И как я могу переделать например структуру массива $GLOBALS? Удалить из него ссылку на $GLOBALS или лучше прямо исходники PHP переписать? Вопрос состоит не в том как надо работать, а как решить задачу.

HalkaR
Спасибо за код, но
Код

$a = array("list"=>array("north"=>"Север", "west"=>"Запад", "south"=>array("1"=>"1","2"=>"2","3"=>"3"), "east"=>"Восток"),
"list2"=>array("1"=>"1000", "2"=>"2000", "3"=>"3000"),
"list3"=>"a");

это многомерный массив.

Код

$a = array(1,2,3);
$a['a'] =& $a;

это рекурсивный массив, и view($a) на нём ухнется.

Это сообщение отредактировал(а) Гость - 6.6.2004, 03:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.