Array (
[0]=>Array (
[0] =>"text"
[1] =>"text"
[2] =>"text"
)
[1] =>Array (
[0] =>""
[1] =>""
[2] =>"text"
)
)
Может быть 1 мерный, 2х мерный или трех мерный. Как это сделать? Только foreach или можно как то проще?
Спустя 50 минут, 40 секунд (19.06.2009 - 05:43) kirik написал(а):
Цитата (PyccHeBa @ 18.06.2009 - 20:52) |
Только foreach или можно как то проще? |
Думаю что только foreach (или while)..
Спустя 2 часа, 45 минут, 27 секунд (19.06.2009 - 08:28) glock18 написал(а):
Смотря что конкретно с ним надо сделать. В php есть рекурсивных функций для работы с массивами. Может одна из них подойдет?
Спустя 43 минуты, 10 секунд (19.06.2009 - 09:11) sergeiss написал(а):
Наверное, только через foreach. Но если написать одну небольшую функцию, то задача станет простой Причем, мерность массива будет уже не важна.
Текст я писать не буду, он несложный. Я только алгоритм опишу.
Эта функция должна брать в качестве параметра исходный массив. Далее, идем по циклу по всем элементам массива. Проверяем тип элемента: если массив, то вызываем ту же функцию, передавая в качестве параметра этот вложенный массив. А если не массив, то проверяем этот элемент на пустоту.
Далее, ежели элемент НЕ пустой, то возвращаем FALSE как индикатор того, что массив не пустой. Если же в данном массиве все элементы пустые, то возвращаем TRUE, потому что массив пуст.
При этом, какова бы ни была вложенность массивов, мы всегда доберемся до элементов, не являющихся массивами.
В итоге пробежим по всем элементам этого "дерева", ежели они все пустые. А ежели не пустые, то после первого же непустого элемента уже можно принимать об этом решение и завершать работу функции.
Текст я писать не буду, он несложный. Я только алгоритм опишу.
Эта функция должна брать в качестве параметра исходный массив. Далее, идем по циклу по всем элементам массива. Проверяем тип элемента: если массив, то вызываем ту же функцию, передавая в качестве параметра этот вложенный массив. А если не массив, то проверяем этот элемент на пустоту.
Далее, ежели элемент НЕ пустой, то возвращаем FALSE как индикатор того, что массив не пустой. Если же в данном массиве все элементы пустые, то возвращаем TRUE, потому что массив пуст.
При этом, какова бы ни была вложенность массивов, мы всегда доберемся до элементов, не являющихся массивами.
В итоге пробежим по всем элементам этого "дерева", ежели они все пустые. А ежели не пустые, то после первого же непустого элемента уже можно принимать об этом решение и завершать работу функции.
Спустя 5 дней, 6 часов, 1 минута, 56 секунд (24.06.2009 - 15:13) PyccHeBa написал(а):
да, только через форич. Немного не по теме, вот функция для удобного отбражения массивов содержащих html теги, до 2х мерных массивов передает. Удобно при парсинге. Мелочь, но может кому пригодится
PHP |
function showArr($m) { |
Спустя 1 час, 24 минуты, 40 секунд (24.06.2009 - 16:38) Sylex написал(а):
Спустя 12 минут, 43 секунды (24.06.2009 - 16:50) glock18 написал(а):
Sylex, есть еще круче для этого
array_walk_recursive
array_walk_recursive
Спустя 9 минут, 34 секунды (24.06.2009 - 17:00) Sylex написал(а):
glock18
знамо, один фиг
знамо, один фиг
Спустя 2 часа, 56 минут, 8 секунд (24.06.2009 - 19:56) glock18 написал(а):
Sylex
та лан
там атна строчка будет
PS: правда про нее написано user-defined functions для callback. так что мало ли. может и не прокатить она.
та лан
там атна строчка будет
PS: правда про нее написано user-defined functions для callback. так что мало ли. может и не прокатить она.
Спустя 10 часов, 1 минута, 24 секунды (25.06.2009 - 05:58) Sylex написал(а):
glock18
конечно, не проканает
конечно, не проканает
Спустя 3 часа, 10 минут, 13 секунд (25.06.2009 - 09:08) glock18 написал(а):
Sylex
я настырный ваапще та и ленивый не захочу делать в цикл, если хочу сделать одной строкой. введу функцию
я настырный ваапще та и ленивый не захочу делать в цикл, если хочу сделать одной строкой. введу функцию
PHP |
function UserdefinedHtmlentities(<те же параметры что в html_entities. ну или подгон в случае их расхождения с тем, что нужно walk>) |
чтобы успокоить свое маниакальное желание делать все на классах, положу функцию в класс, сделаю статической. и передаю в array_walk_recursive() ее массивом
PHP |
array('myclass', 'UserdefinedHtmlentities'); |
и вот мне не пришлось делать цикл и я щастлив! правда пришлось кучу всякого ненужного сделать - переопределить базовую функцию, можно в класс не засовывать, но я хочу в общем, дело личных пристрастий. мне лениво цикл писать, а кому-то извращаться так же как я
Спустя 4 минуты, 48 секунд (25.06.2009 - 09:13) sergeiss написал(а):
glock18 - а объясни, плз, как быть, если у тебя массив многомерный? Как твой callback будет работать? Чегой-то я не понял.
Спустя 8 минут, 56 секунд (25.06.2009 - 09:22) sergeiss написал(а):
Если делать "в лоб", то можно так:
PHP |
function empty_array( $arr ) |
Спустя 12 минут, 37 секунд (25.06.2009 - 09:34) glock18 написал(а):
sergeiss, так мы же как раз про многомерные. array_walk_recursive проходит рекурсивно по массиву, применяя к элементам функцию.
Только поправлю тебя малость - мы здесь немного уже оффтоп Уже про обработку массива - PyccHeBa запостил(а?) выше сообщение.
твоя функция чистый пример применения C на php написана грамотно, но не учитывает, что есть функции встроенные. хотя для проверки на пустоту может лучше подходит даже.
для проверки на пустоту я бы еще статическую переменную ввели - уже пуст или еще не пуст. если уже пуст, то просто ничего не делаю с элементами дальше.
ну типа
Только поправлю тебя малость - мы здесь немного уже оффтоп Уже про обработку массива - PyccHeBa запостил(а?) выше сообщение.
твоя функция чистый пример применения C на php написана грамотно, но не учитывает, что есть функции встроенные. хотя для проверки на пустоту может лучше подходит даже.
для проверки на пустоту я бы еще статическую переменную ввели - уже пуст или еще не пуст. если уже пуст, то просто ничего не делаю с элементами дальше.
ну типа
PHP |
public static function UserdefinedHtmlentities(<те же параметры что в html_entities. ну или подгон в случае их расхождения с тем, что нужно walk>) |
вот как-то так.
Спустя 3 часа, 50 минут, 39 секунд (25.06.2009 - 13:25) Sylex написал(а):
мудрено....
PHP |
<?php |
и никаких циклов.
Спустя 11 минут, 18 секунд (25.06.2009 - 13:36) glock18 написал(а):
Да, у тебя лучше решение
_____________