Динамически добавлять измерение в массив PHP - PullRequest
1 голос
/ 17 июня 2019

Я много думал об этом, прежде чем написать этот вопрос.

Вопрос более концептуален, чем все остальное.

Начиная с классического массива, я хочу динамически преобразовать его в мультидинамику с поддеревьями.

, чтобы быть ясно, из этого:

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...'];

к этому:

Array
(
    ['my'] =>
        ['unique'] =>
            ['values'] =>
                ['array'] =>
                    ['and'] =>
                        ['so'] =>
                            ['on']=>
                                ['...'] => []
)

Единственная попытка, которую я предпринял, заключалась в том, чтобы «варварски» динамически создавать строки и передавать их с помощью команды eval().

Я не пишу здесь код для личного достоинства. Это достаточно плохо, я признался в этом. Инсайдеры поймут ...

Я полностью верю, что есть правильный способ сделать это, но, конечно, если я здесь, я этого не знаю

Лучший

Оскар

Ответы [ 3 ]

4 голосов
/ 17 июня 2019

Используются ссылки для отслеживания того, к какому элементу вы в настоящее время добавляете данные, поэтому для начала $add является корневым элементом (при установке его на &$newArray). Каждый раз, когда он добавляет новый уровень, он перемещает ссылку на этот новый элемент (с &$add[$key]) и повторяет процесс ...

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on', '...'];
$newArray = [];
$add = &$newArray;
foreach ( $array as $key )  {
    $add[$key] = [];
    $add = &$add[$key];
}
print_r($newArray);
2 голосов
/ 17 июня 2019

Начало с конца и конец с началом:

$length = sizeof($array);
$value = [];
for ($index = $length - 1; $index >= 0; $index--) {
    $value = [
        "{$array[$index]}" => $value
    ];
    unset($array[$index]);
}
$array[]=$value;
1 голос
/ 17 июня 2019

Или другой вариант - создать структуру извне, используя цикл while и уменьшая индекс на каждой итерации.

Временное сохранение того, что у вас уже есть, и сброс текущего $result.Затем добавьте запись с новым ключом и добавьте временно сохраненную переменную в качестве значения.

$array = ['my', 'unique', 'values', 'array', 'and', 'so', 'on'];
$result = [];
$tot = count($array) - 1;

while ($tot > -1) {
    $temp = $result;
    $result = [];
    $result[$array[$tot]] = $temp;
    $tot--;
}

print_r($result);

Php demo

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