Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Рекурсивные массивы


Автор: Гость 30.5.2004, 00:34
Имеем:

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

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

пожалуйста
array_diff_assoc()
и
foreach($a as $tmp) if ($a == $tmp) echo "match";
не предлагать.

Автор: IZ@TOP 30.5.2004, 11:35
bool is_array($array[0])

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

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

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

Автор: MuToGeN 31.5.2004, 11:28
Если $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 - очень полезный ресурс. Далеко не все станут все за вас расписывать.

Автор: IZ@TOP 31.5.2004, 11:37
MuToGeN
если бы ты глянул весь пост, ты бы увидел подобный ответ. однако этот вариант видимо ему не подходит wink.gif Там проблема в другом biggrin.gif

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

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

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

Всё верно

Автор: akul 4.6.2004, 16:24
Проблема заключается в том, что _НЕ НАДО ДЕЛАТЬ ЦИКЛИЧЕСКИХ ССЫЛОК_. Текущая проблема - наименьшая из тех, с которыми ты можешь столкнуться дальше. Поэтому думай, как переделать структуру данных.

Автор: HalkaR 6.6.2004, 00:10
Код
<?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);

?>
Работа с рекурсивными массивами.

Автор: Гость 6.6.2004, 03:36
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) на нём ухнется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)