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


Автор: AlexW 27.12.2007, 13:36
Есть код получающии список городов(массив $goroda) по названию области($oblasti[$b]), если инфа по городам есть.
Из формируеться многомерный массив.
Код

        for($b=0;$b<count($oblasti);$b++)
            {
            $stra[subregion][]=$oblasti[$b];
            $goroda = get_array_goroda($oblasti[2][$b]);
            foreach($goroda as $value)
                {
                $stra[subregion][$oblasti[$b]][]=$value;
                }
            }


На выходе получаеться:
Код

            [subregion] => Array
                (
                    [0] => Sachsen-Anhalt
                    [1] => Mecklenburg-Vorpommern
                    [2] => Rheinland-Pfalz
                    [3] => Baden-Württemberg
                    [Baden-Württemberg] => Array
                        (
                            [0] => Ulm
                            [1] => Rottweil
                            [2] => Heilbronn
                            [3] => Offenburg
                            [4] => Mannheim
                            [5] => Konstanz
                            [6] => Freiburg Im Breisgau
                            [7] => Heidelberg
                            [8] => Stuttgart
                            [9] => Karlsruhe
                        )

                    [4] => Niedersachsen
                    [5] => Thüringen
                )

ВОПРОС - А как можно сделать чтобы было:
Код

            [subregion] => Array
                (
                    [0] => Sachsen-Anhalt
                    [1] => Mecklenburg-Vorpommern
                    [2] => Rheinland-Pfalz
                    [3] => [Baden-Württemberg] => Array
                        (
                            [0] => Ulm
                            [1] => Rottweil
                            [2] => Heilbronn
                            [3] => Offenburg
                            [4] => Mannheim
                            [5] => Konstanz
                            [6] => Freiburg Im Breisgau
                            [7] => Heidelberg
                            [8] => Stuttgart
                            [9] => Karlsruhe
                        )

                    [4] => Niedersachsen
                    [5] => Thüringen
                )


прямо головоломка какая та.., уже несколько часов медитирую.... smile 

Автор: skyboy 27.12.2007, 13:52
Цитата(AlexW @  27.12.2007,  12:36 Найти цитируемый пост)
[3] => [Baden-Württemberg] => Array

у тебя получился "двойной индекс". 
как, по-твоему, можно было бы обращаться к такому элементу?
такая конструкция невозможна.
можно так:
Код

[3] => Array 
           (
             'name'=> 'Baden-Württemberg',
             'sub' => Array
                        (
                            [0] => Ulm
                            [1] => Rottweil
                            [2] => Heilbronn
                            [3] => Offenburg
                            [4] => Mannheim
                            [5] => Konstanz
                            [6] => Freiburg Im Breisgau
                            [7] => Heidelberg
                            [8] => Stuttgart
                            [9] => Karlsruhe
                        )
           )


Автор: AlexW 27.12.2007, 14:07
Спасиб за разяснение, ваш вариант подходит тоже) 


Автор: PrivateRayan 27.12.2007, 14:22
сложно судить, не зная задачи, для которой этот массив делается, но лично мне бы больше понравился первоначальный, но без элемента с индексом 3

Автор: skyboy 27.12.2007, 14:44
Цитата(PrivateRayan @  27.12.2007,  13:22 Найти цитируемый пост)
 но без элемента с индексом 3

ну, тогда для однотипной обработки - все элементы с ассоциативным индексом по имени города/региона, а значением - массив подрегионов.  или пустой массив. 
ты об этом?

Автор: PrivateRayan 27.12.2007, 15:15
тоже, кстати, хорошая идея.
Код

                    [Sachsen-Anhalt] => ''
                    [Mecklenburg-Vorpommern] => ''
                    [Rheinland-Pfalz] => ''
                    [Baden-Württemberg] => Array
                        (
                            [0] => Ulm
                            [1] => Rottweil
                            [2] => Heilbronn
                            [3] => Offenburg
                            [4] => Mannheim
                            [5] => Konstanz
                            [6] => Freiburg Im Breisgau
                            [7] => Heidelberg
                            [8] => Stuttgart
                            [9] => Karlsruhe
                        )



Но для понимания сложнее, да. И вообще, все эти выкрутасы с ключами противны человеческой природе =)
Но учитывая, что ключом в PHP может быть что угодно, и всякие операции, когда ключи и значения меняются местами, типа array_keys или count_values являются в пхп штатными, то предложенный способ вполне можно считать подходящим.

Не говоря уже о том, что при значащих ключах поиск упрощается на порядки - isset вместо array_search. В этом смысле массив со значащими ключами и незначащими значениями куда лучше, чем обычный - со значащими значениями и ничего не значащими ключами (1,2,3).

Автор: skyboy 27.12.2007, 15:25
я бы довел до аболюта однотипность структуры:
Код

 [Sachsen-Anhalt] => ''
                    [Mecklenburg-Vorpommern] => ''
                    [Rheinland-Pfalz] => ''
                    [Baden-Württemberg] => Array
                        (
                            [Ulm] => Array()
                            [Rottweil] => Array()
                            [Heilbronn]=> Array()
                            [Offenburg] => Array()
                            [Mannheim] => Array()
                        )

на тот случай, если возможна вложенность больше двух. в противном случае, придется определять тип элемента при обращении: если is_array - то есть подрегионы и названием является ключ, если нет - то подрегионов нет и названием является значение... лишние условия, все же. 
ну, если вложенность надо фиксированно двухуровневая(впрочем, зарекаться никому бы не советовал - жизнь, она штука изменчивая), то можно обойтись и двумя типами элементов: с вложенным массивом и с именем города в качестве значения.

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