<?php
/**
* Make an object that isn't an array into an array containing that object, or
* return the element if it is an array.
*/
function array_box($elm) {
if(is_array($elm)) {
return $elm;
}
return array($elm);
}
/**
* Flatten a two-dimensional array into a 1-dimensional array.
*/
function array_flatten(array $arr) {
return call_user_func_array("array_merge", $arr);
}
/**
* Zip a 2-dimensional array into another 2-dimensional array, e.g.:
* array_zip(array(1, 2, 3), array('a', 'b', 'c'))
* => array(array(1, 'a'), array(2, 'b'), array(3, 'c'))
*/
function array_zip(array $arr) {
return call_user_func_array("array_map", array_merge(array(NULL), $arr));
}
/**
* Rotate a 2-dimensional array.
*/
function array_rotate(array $arr) {
return array_zip($arr);
}
/**
* Preserve only a few keys in an associative array. E.g.
* array_keep_keys(array('a'=>1, 'b'=>2, 'c'=>3), 'a', 'c')
* array_keep_keys(array('a'=>1, 'b'=>2, 'c'=>3), array('a', 'c'))
* => array('a'=>1, 'c'=>3)
*/
function array_keep_keys(array $arr, $key1) {
$keys = func_get_args();
$keys = array_slice($keys, 1, count($keys), FALSE);
$keys = array_flatten(array_map("array_box", $keys));
return array_intersect_key($arr, array_flip($keys));
}