由函数创建的合并数组

问题描述 投票:0回答:1

我有一个PHP数组main_array,在我的模板文件中,我有一个访问此数组的函数。在该函数中,我还有另一个函数,该函数可以根据实际前端页面上查询的任何键来获取并显示main_array值。我使用它来获取基于页面或其他查询的URL或ID的main_array中存储的元数据。

示例:在前端页面中,我有

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

main_array中,我有

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

在模板文件中,我有一个循环和查找功能,该功能获取相关产品的标签并为每个产品创建一个数组

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弄乱了一段时间,但没有按预期输出。

php arrays array-merge
1个回答
0
投票

我认为您很亲密,只是缺少了几个步骤

$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;


}
© www.soinside.com 2019 - 2024. All rights reserved.