Массив как папки - PullRequest
       4

Массив как папки

0 голосов
/ 09 сентября 2011

Я сделал этот код:
index.php:

<code>$series = array(
    "a" => array(
        "b" => array(
            "FOLD", "more_arrays.php"
        ),
        "b2" => array(
        )
    )
);

function pre($a) { print "<pre>"; print_r($a); print "
";} $ string = "a ,,, b"; $ all_directions = explode (",,,", $ string); $ all_directions = array_map ("trim", $ all_directions); $ b = ""; $ g = 0; foreach ($ all_directions как $ v) { $ b. = "['" .str_replace (array ("[", "]", "'", "\" "), null, $ v)." '] "; $ Г ++; } @eval ('$ where = $ series'. $ b. ';'); if (isset ($ where [0]) && $ where [0] == "FOLD") { // a [series], b [series], c [new_array] require_once (»./ more_folders /".$ где [1]); печатать $ g; } для ($ i = 0; $ i

more_array.php:

$series_in = array(
    "c" => array(
        "d" => array(
            "bla" => array(),
            "hey" => array(),
            "ha" => array()
        ),
        "d2" => array(

        )
    ),
    "c2" => array(
    )
)

В $ string я определяю, какую «папку» я хочу видеть, например, если я напишу $string = "a";, она покажет все массивы внутри «a».

ключ = имя папки, значение = подпапки внутри папки и эти массивы.

Теперь: поскольку это будет огромный массив, я хочу разделить его на множество массивов. Если вы видите в коде, $series[a][b] прямой переход к другому массиву.

Теперь, если я сделаю $string = "a,,,b";, я хочу увидеть: "c" и "c2"
и если я сделаю $string = "a,,,b,,,c";, я хочу увидеть: "d", "d2"
и если я сделаю $string = "a,,,b,,,c,,,d";, я хочу увидеть все внутри d ("бла", "эй", "ха" ..)

Как я могу это сделать?

1 Ответ

0 голосов
/ 13 октября 2011

Я укушу ...

Кажется, у вас есть большинство частей.По сути, вам нужно собрать их в один цикл.

У вас есть $string и $series.Затем вы разделяете $string на свои $all_directions.Цикл по $all_directions, каждый раз погружаясь в массив $series = $series[$all_directions[$i]]; Когда вы сделали последний $all_directions возврат $series (но следите за исчерпанием $series, возвращайте ноль или false, если выуверен, что это будет ошибкой).

Единственное другое, что есть в любое время $series[$all_directions[$i]] - это специальная запись "FOLD", затем сначала загрузите файл и назначьте ему на лету что-то вроде include ...; $series[$all_directions[$i]] = $series_in;

Вы не хотите и не нуждаетесь в eval(), и цикл лучше использовать for, потому что вам нужно проверить "FOLD" в ключе (я бы также сказал, использовать рекурсивную функцию, но высказал, что массив может быть очень большим, так что это может снизить производительность).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...