合并函数创建的数组
Merging arrays created by a function
我有一个 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
一段时间,但它没有按预期输出。
我想你已经很接近了,只是少了几步
$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;
}
我有一个 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
一段时间,但它没有按预期输出。
我想你已经很接近了,只是少了几步
$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;
}