Ответ 1
Есть две функции, называемые array_keys и array_values :
$array_keys = array_keys($array);
$array_values = array_values($array);
Есть ли простой способ разбить массив на два массива, один из которых состоит из всех ключей, а другой состоит из всех значений? Это будет обратным действию 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_keys()
и array_values()
.
$keys = array_keys($array);
$vals = array_values($array);
К сожалению, нет встроенного инвертора array_combine. Также нет способа определить один из них, поскольку array_combine ожидает несколько параметров, и мы не можем вернуть несколько значений из функции.
Мы можем построить альтернативу array_combine, которая принимает один аргумент: массив ключей и массив значений, объединенных в другой массив. Это преобразование называется "неуправляемым" и выполняется функцией "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
Обратите внимание, что они принимают разные типы аргументов:
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
)
)
*/