Объединение массивов, созданных функцией - PullRequest
0 голосов
/ 12 марта 2020

У меня есть PHP массив main_array, и в моем файле шаблона у меня есть функция, которая обращается к этому массиву. В рамках этой функции у меня есть другая функция, которая может получать и отображать значения main_array в зависимости от того, какой ключ запрашивается на текущей странице интерфейса. Я использую это для получения метаданных, хранящихся в main_array на основе URL-адреса или идентификатора страницы или какого-либо другого запроса.

Пример: на первой странице у меня есть

$prod_id = [
    ["query" => "prod-1"],
    ["query" => "prod-2"]
];

In main_array У меня есть

$main_array = [
    ["name" => "prod-1", "tags" => "lilac, rose, wood"],
    ["name" => "prod-2", "tags" => "wood, plastic"]
];

В файле шаблона у меня есть al oop и функция поиска, которая получает теги соответствующих продуктов и создает массив для каждого

function lookup($lookup_value, $lookup_array, $lookup_column, $result_column) {
    foreach ($lookup_array as $item) {
            if ($item[$lookup_column] == $lookup_value) {
                return $item[$result_column];
            }
    }
    return false;
}   

foreach ($prod_id as $tags) {
    $result = lookup($tags["query"],$main_array,"name","tags");
}

Это отлично работает, он создаст два массива с двумя наборами тегов. Проблема, с которой я сталкиваюсь, - это объединение массивов, созданных функцией поиска, чтобы я мог получить уникальные значения - я не хочу, чтобы тег «wood» появлялся дважды. Я какое-то время путался с array_merge, но он не выводит, как ожидалось.

1 Ответ

0 голосов
/ 12 марта 2020

Я думаю, что вы близко, просто пропустили пару шагов

$unique_tags = [];
foreach ($prod_id as $tags) {

    $result = lookup($tags["query"],$main_array,"name","tags");

    // `tags` is a string, so explode it to get an array
    $result_as_array = explode( ',', $result );

    // merge like you mentioned
    $merged_array = array_merge( $unique_tags, $result_as_array );

    // make sure there's no duplicate entries
    $merged_array_no_duplicates = array_unique( $merged_array );

    // re-assign to the array where you want to store all tags
    $unique_tags = $merged_array_no_duplicates;


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