Есть ли простой способ разбить массив на два массива, один из которых состоит из всех ключей, а другой состоит из всех значений? Это будет обратным действию 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, которая принимает один аргумент: массив ключей и массив значений, объединенных в другой массив. Это преобразование называется «неуправляемым» и выполняется функцией «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
Обратите внимание, что они принимают разные типы аргументов:
Как ни странно, функции, которые вы ищете, называются 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 ) ) */