Хотелось бы просто пройтись циклом по массиву, без использования каких-либо функций, типа array_walk или рекурсий. Подскажите красивое, быстрое решение. (заранее вложенность элементов массива неизвестна)
Примечание:
мысли есть, нужно будет создать временный массив, может кто-нибудь знает более красивое решение
Примечание:
Dr. von Ozgg
рекурсия медленная
Примечание:
Dr. von Ozgg
да и просто интересно как это сделать
Примечание:
Безруков Павел
хотелось бы вообще без каких-либо функций, ну очень хочется
Примечание:
в общем вся идея в том, чтобы одна и та же функция не вызывалось много раз, классно же
Примечание:
Безруков Павел
Потому что это годится только для двумерного массива, а я хочу для любого многомерного, при чём заранее неизвестно какой уровень вложенности, т.е. может быть $myarray[$i][$j][$k][$m]
Примечание:
я уже почти придумал, мысль ходит где-то рядом
Примечание:
В общем я тут что-то написал, вроде работает
пусть $a - это какой-нибудь многомерный массив
$flag = true;
$i = 0;
while ($flag == true)
{
$flag = false;
foreach ($a as $key=>$value)
{
if (is_array($value))
{
$flag = true;
$tmp_arr[] = $value;
}
echo 'key '.$key.', value '.$value.'<br/>';
}
if (isset($tmp_arr[$i]))
{
$a = $tmp_arr[$i++];
}
}
здесь перебор всех элементов массива, только echo коряво сделал, если $value - массив, то он так и пишет Array, но суть не в этом, главное каждый элемент перебирает, наверняка быстрее рекурсивных функций
Примечание:
табуляция не проставилась, исправляюсь
$flag = true;
$i = 0;
while ($flag == true)
{
$flag = false;
foreach ($a as $key=>$value)
{
if (is_array($value))
{
$flag = true;
$tmp_arr[] = $value;
}
echo 'key '.$key.', value '.$value.'<br/>';
}
if (isset($tmp_arr[$i]))
{
$a = $tmp_arr[$i++];
}
}
Примечание:
crimaniak
я думаю мой вариант будет работать быстрее
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.