不幸的是,array_combine的没有内置的倒数。也没有办法来定义一个,因为array_combine需要多个参数,我们不能从函数返回多个值。
我们可以构造array_combine的一个替代方法,它只接受一个参数:键的数组和值的数组一起包装在另一个数组中。该转化称为 “uncurrying”,并且由 “call_user_func_array” 函数来执行:
$array_comb = function($arr) { return call_user_func_array('array_combine', $arr); };
该可选功能确实有一个逆:
$array_split = function($arr) { return array(array_keys($arr), array_values($arr)); };
如果我们定义函数组合:
$compose = function($f, $g) {
return function($x) use ($f, $g) { return $f($g($x)); };
};
然后下面的函数全部(延伸)相等,即。他们都返回参数不变:
$identity = function($x) { return $x; };
$left_inverse = $compose($array_split, $array_comb); // Split then combine
$right_inverse = $compose($array_comb, $array_split); // Combine then split
注意,他们接受不同的参数类型,但:
- $身份将在任何工作。
- $ left_inverse将适用于任何阵列。
- $ right_inverse可用于阵列数组,其中外部数组包含2个元素,两个内部数组长度相等,第一个内部数组仅包含整数和字符串。
查了一下函数,使用它们和它们的工作。所有其他人都是正确的。我想,我会花时间在PHP手册或任何参考书上。非常感谢你们。 – Bululu 2011-06-04 04:57:13