Построить многомерный массив с помощью array_push - PullRequest
1 голос
/ 26 февраля 2020

Глядя, чтобы построить ниже многомерного массива. Первый уровень 1 в порядке, но второй установлен на тот же уровень 1.

Вопрос:

Как я могу направить второго foreach-l oop чтобы построить уровень 2, прямо под уровнем 1?

Требуемый результат:

Array
(
    [id_no_1] => Array
        (
            [0] => title_1
        )

    [id_no_2] => Array
        (
            [0] => title_2
        )

)

Моя попытка:

<?php

// Position [Level-1]
$taxonomy_id = [
  "id_no_1",
  "id_no_2",
];

// Position [Level-2]
$titles = [
  "title_1",
  "title_2",
];

$array = [];

// Populate [level-1]
foreach ($taxonomy_id as $key => $value) {
  array_push($array, $taxonomy_id["{$key}"]);
}

// Populate [level-2]
foreach ($titles as $key => $value) {
  array_push($array, $titles["{$key}"]);
}


print_r($array);

Результат

Массив

(
    [0] => id_no_1
    [1] => id_no_2
    [2] => title_1
    [3] => title_2
)

Ответы [ 4 ]

1 голос
/ 27 февраля 2020

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

A for вместо foreach l oop может иметь здесь больше смысла, это позволит вам использовать счетчик l oop для доступа к соответствующим значениям из обоих одновременно.

1 голос
/ 26 февраля 2020

Я бы сделал это так:

$result = array_combine($taxonomy_id, array_chunk($titles, 1));

array_chunk($titles, 1) помещает каждую строку заголовка в массив, а затем вы можете использовать результат этого в качестве значения для array_combine().

Интересно, откуда взялись оригинальные массивы $taxonomy_id и $titles? Если возможно, я бы предпочел объединить их в то время, когда они были созданы, а не пытаться соединить их вместе, как это.

1 голос
/ 26 февраля 2020

Существует простое решение вашей проблемы с одним foreach:

    foreach ($taxonomy_id as $key => $item) {
        $array[$item][] = $titles[$key] ?? null;
    }
0 голосов
/ 26 февраля 2020

Вы можете сделать это, вложив два foreach:

$array = [];
foreach ($taxonomy_id as $key => $value) {
    foreach ($titles as $key2 => $value2) {
        if ($key == $key2) {
            $array[$value][] = $value2;
        }
    }
}

Вы можете проверить ЗДЕСЬ

...