假设我有一个标签数组
$all_tags = array('A', 'B', 'C');
我想创建一组带有 $_GET 变量的 URL。我希望链接如下所示:
'A'
链接到 "index.php?x[]=B&x[]=C"
'B'
链接到 "index.php?x[]=A&x[]=C"
等等($_GET 是一个数组,除了“current”元素外,所有元素都包含在内)。 (我知道实现这个有更简单的方法:实际上我正在简化一个更加复杂的情况)
我想使用
array_filter()
来解决这个问题。这是我的尝试:function make_get ($tag) { return 'x[]=' . $tag; }
function tag_to_url ($tag_name) {
global $all_tags;
$filta = create_function('$x', 'global $all_tags; return ($x != $tag_name);');
return 'index.php?' . implode('&', array_map("make_get", array_filter($all_tags, "filta")));
}
print_r(array_map("", $all_tags));
但这并不能产生作用。我怀疑这可能与PHP中的映射和过滤器如何改变数据结构本身以及返回布尔值有关,而不是使用函数式编程风格,在那里它们不会改变数据结构并返回新列表。
我也对使此代码更加简洁的其他方法感兴趣。
create_function
中,$tag_name
未定义(这可能是问题所在)。我不认为 PHP 像 C# (或类似语言)那样将作用域传递给create_function
。但我也可能错了。 - Brad Christie