有没有一种简单的方法将数组拆分成两个数组,一个由所有键组成,另一个由所有值组成?这将与array_combine的操作相反。是否有内置函数来执行此类任务? 让我们使用一个示例数组:
$array = array('Tiger' => 'Forest', 'Hippo' => 'River', 'Bird' => 'Sky');
是否有将上述数组拆分为:
的函数$array_keys = array('Tiger', 'Hippo', 'Bird');
$array_values = array('Forest', 'River', 'Sky');
答案 0 :(得分:32)
有两个名为array_keys和array_values的函数:
$array_keys = array_keys($array);
$array_values = array_values($array);
答案 1 :(得分:7)
实际上有两个功能:
$keys = array_keys($array);
$values = array_values($array);
你也可以这样做:
$array = array_combine($keys, $values);
答案 2 :(得分:3)
答案 3 :(得分:2)
奇怪的是,您正在寻找的功能称为array_keys()
和array_values()
。
$keys = array_keys($array);
$vals = array_values($array);
答案 4 :(得分:2)
不幸的是,没有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
请注意,它们接受不同的参数类型:
答案 5 :(得分:1)
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
)
)
*/