如何解决PHP将数组拆分为两个数组-键数组和值数组
|| 有没有一种简单的方法可以将一个数组拆分为两个数组,一个数组由所有键组成,另一个数组由所有值组成?这与array_combine的操作相反。有内置功能可以执行此类任务吗? 让我们使用一个示例数组:$array = array(\'Tiger\' => \'Forest\',\'Hippo\' => \'River\',\'Bird\' => \'Sky\');
是否有将上述数组拆分为的函数:
$array_keys = array(\'Tiger\',\'Hippo\',\'Bird\');
$array_values = array(\'Forest\',\'River\',\'Sky\');
解决方法
有两个函数,分别称为array_keys和array_values:
$array_keys = array_keys($array);
$array_values = array_values($array);
, 实际上有两个功能:
$keys = array_keys($array);
$values = array_values($array);
您也可以执行完全相反的操作:
$array = array_combine($keys,$values);
, 使用array_keys和array_values
, 不幸的是,没有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
请注意,尽管它们接受不同的参数类型:
$ identity可以处理任何事情。
$ left_inverse可以在任何数组上使用。
$ right_inverse将适用于数组数组,其中外部数组包含2个元素,两个内部数组的长度相等,而第一个内部数组仅包含整数和字符串。
, 奇怪的是,您要查找的功能称为array_keys()
和array_values()
。
$keys = array_keys($array);
$vals = array_values($array);
, function array_split($data)
{
$x = 0;//Counter to ensure accuracy
$retArray[0] = array();//Array of Keys
$retArray[1] = array();//Array of Values
foreach($data as $key => $value)
{
$retArray[0][$x] = $key;
$retArray[1][$x] = $value;
$x++;
}
RETURN $retArray;
}
$data = array(\"key\" => \"value\",\"key2\" => \"value2\");
$splitData = array_split($data);
//print_r($splitData[0]);//Output: Array ( [0] => key [1] => key2 )
//print_r($splitData[1]);//Output: Array ( [0] => value [1] => value2 )
print_r($splitData);
//Output:
/*
Array
(
[0] => Array
(
[0] => key
[1] => key2
)
[1] => Array
(
[0] => value
[1] => value2
)
)
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。