File "Arr.php"
Full Path: /home/jlklyejr/public_html/post-date/wp-content/plugins/meta-box/src/Support/Arr.php
File size: 3.23 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace MetaBox\Support;
class Arr {
/**
* New array map function that accepts more params than just values.
* Params: array|item, callback, other params.
*/
public static function map() {
$args = func_get_args();
$items = array_shift( $args );
$callback = array_shift( $args );
if ( ! is_array( $items ) ) {
array_unshift( $args, $items );
return call_user_func_array( $callback, $args );
}
return array_map(
function( $item ) use ( $callback, $args ) {
array_unshift( $args, $item );
return call_user_func_array( $callback, $args );
},
$items
);
}
/**
* Convert a comma separated string to array.
*
* @param array|string $csv Comma separated string.
*/
public static function from_csv( $csv ) : array {
return is_array( $csv ) ? $csv : array_filter( array_map( 'trim', explode( ',', $csv . ',' ) ) );
}
/**
* Change array key.
*
* @param array $array Input array.
* @param string $from From key.
* @param string $to To key.
*/
public static function change_key( &$array, $from, $to ) {
if ( isset( $array[ $from ] ) ) {
$array[ $to ] = $array[ $from ];
}
unset( $array[ $from ] );
}
/**
* Ensure a variable is an array.
*/
public static function ensure( $input ) : array {
return (array) $input;
}
/**
* Flatten an array.
* @link https://stackoverflow.com/a/1320156/371240
*/
public static function flatten( array $array ) : array {
$return = [];
array_walk_recursive(
$array,
function( $a ) use ( &$return ) {
$return[] = $a;
}
);
return $return;
}
/**
* Convert flatten collection (with dot notation) to multiple dimensional array
*
* @param collection $collection Collection to be flatten.
* @return array
*/
public static function unflatten( $collection ) {
$collection = (array) $collection;
$output = [];
foreach ( $collection as $key => $value ) {
self::set( $output, $key, $value );
if ( is_array( $value ) && ! strpos( $key, '.' ) ) {
$nested = self::unflatten( $value );
$output[ $key ] = $nested;
}
}
return $output;
}
/**
* Set array element value with dot notation.
*/
public static function set( &$array, $key, $value ) {
if ( is_null( $key ) ) {
$array = $value;
return $array;
}
// Do not parse email value.
if ( is_email( $key ) ) {
$array[ $key ] = $value;
return;
}
$keys = explode( '.', $key );
while ( count( $keys ) > 1 ) {
$key = array_shift( $keys );
// If the key doesn't exist at this depth, we will just create an empty array
// to hold the next value, allowing us to create the arrays to hold final
// values at the correct depth. Then we'll keep digging into the array.
if ( ! isset( $array[ $key ] ) || ! is_array( $array[ $key ] ) ) {
$array[ $key ] = [];
}
$array =& $array[ $key ];
}
$array[ array_shift( $keys ) ] = $value;
}
/**
* Get array element value with dot notation.
*/
public static function get( $array, $key, $default = null ) {
if ( is_null( $key ) ) {
return $array;
}
$keys = explode( '.', $key );
foreach ( $keys as $key ) {
if ( isset( $array[ $key ] ) ) {
$array = $array[ $key ];
} else {
return $default;
}
}
return $array;
}
}