【发布时间】:2011-12-07 18:18:38
【问题描述】:
假设我有一个标签数组
$all_tags = array('A', 'B', 'C');
我想创建一组带有 $_GET 变量的 URL。
我希望链接是:'A' 链接到 "index.php?x[]=B&x[]=C"'B' 链接到 "index.php?x[]=A&x[]=C"
等等($_GET 是一个包含除“当前”元素之外的所有元素的数组)
(我知道有一种更简单的方法来实现这一点:我实际上是在简化更复杂的情况)
我想使用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 中的映射和过滤器如何实际改变数据结构本身并返回一个布尔值有关,而不是使用函数式样式,它们不会改变并返回一个新列表。
我也对其他使代码更简洁的方法感兴趣。
【问题讨论】:
-
所以...无论是什么链接,从链接集合中删除该特定条目,然后使用剩余值构建 URL?
-
可能是这样的:ideone.com/vVnWe?
-
@BradChristie 评论#2:这不像我想要的那样“实用”,但它工作得很好而且简洁。你为什么不把它作为答案呢?
-
我不确定您的方向是否正确,或者我是否正确理解了这个问题。
-
顺便说一句,在您的
create_function中,$tag_name未定义(这可能是问题所在)。我不认为 PHP 将作用域转移到create_function,就像C#(或类似的)对lambda 所做的那样。但我可能错了。
标签: php filter functional-programming higher-order-functions