You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
4.2 KiB
PHTML
151 lines
4.2 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* The Array helpers.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @package RankMath
|
||
|
* @subpackage RankMath\Helpers
|
||
|
* @author RankMath <support@rankmath.com>
|
||
|
*/
|
||
|
|
||
|
namespace RankMath\Helpers;
|
||
|
|
||
|
use ArrayAccess;
|
||
|
|
||
|
/**
|
||
|
* Arr class.
|
||
|
*/
|
||
|
class Arr {
|
||
|
|
||
|
/**
|
||
|
* Determine whether the given value is array accessible.
|
||
|
*
|
||
|
* @param mixed $value Value to check.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function accessible( $value ) {
|
||
|
return is_array( $value ) || $value instanceof ArrayAccess;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the given key exists in the provided array.
|
||
|
*
|
||
|
* @param ArrayAccess|array $array Array to check key in.
|
||
|
* @param string|int $key Key to check for.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function exists( $array, $key ) {
|
||
|
if ( $array instanceof ArrayAccess ) {
|
||
|
// @codeCoverageIgnoreStart
|
||
|
return $array->offsetExists( $key );
|
||
|
// @codeCoverageIgnoreEnd
|
||
|
}
|
||
|
|
||
|
return array_key_exists( $key, $array );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check whether an array or [[\Traversable]] contains an element.
|
||
|
*
|
||
|
* This method does the same as the PHP function [in_array()](https://secure.php.net/manual/en/function.in-array.php)
|
||
|
* but additionally works for objects that implement the [[\Traversable]] interface.
|
||
|
*
|
||
|
* @throws \InvalidArgumentException If `$array` is neither traversable nor an array.
|
||
|
*
|
||
|
* @param array|\Traversable $array The set of values to search.
|
||
|
* @param mixed $search The value to look for.
|
||
|
* @param bool $strict Whether to enable strict (`===`) comparison.
|
||
|
*
|
||
|
* @return bool `true` if `$search` was found in `$array`, `false` otherwise.
|
||
|
*/
|
||
|
public static function includes( $array, $search, $strict = true ) {
|
||
|
if ( $array instanceof \Traversable ) {
|
||
|
return self::includes_traversable( $array, $search, $strict );
|
||
|
}
|
||
|
|
||
|
$is_array = is_array( $array );
|
||
|
if ( ! $is_array ) {
|
||
|
throw new \InvalidArgumentException( 'Argument $array must be an array or implement Traversable' );
|
||
|
}
|
||
|
|
||
|
return $is_array ? in_array( $search, $array, $strict ) : false; // phpcs:ignore
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check Traversable contains an element.
|
||
|
*
|
||
|
* @param \Traversable $array The set of values to search.
|
||
|
* @param mixed $search The value to look for.
|
||
|
* @param bool $strict Whether to enable strict (`===`) comparison.
|
||
|
*
|
||
|
* @return bool `true` if `$search` was found in `$array`, `false` otherwise.
|
||
|
*/
|
||
|
private static function includes_traversable( $array, $search, $strict = true ) {
|
||
|
foreach ( $array as $value ) {
|
||
|
if ( ( $strict && $search === $value ) || $search == $value ) { // phpcs:ignore
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Insert a single array item inside another array at a set position
|
||
|
*
|
||
|
* @param array $array Array to modify. Is passed by reference, and no return is needed.
|
||
|
* @param array $new New array to insert.
|
||
|
* @param int $position Position in the main array to insert the new array.
|
||
|
*/
|
||
|
public static function insert( &$array, $new, $position ) {
|
||
|
$before = array_slice( $array, 0, $position - 1 );
|
||
|
$after = array_diff_key( $array, $before );
|
||
|
$array = array_merge( $before, $new, $after );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Push an item onto the beginning of an array.
|
||
|
*
|
||
|
* @param array $array Array to add.
|
||
|
* @param mixed $value Value to add.
|
||
|
* @param mixed $key Add with this key.
|
||
|
*/
|
||
|
public static function prepend( &$array, $value, $key = null ) {
|
||
|
if ( is_null( $key ) ) {
|
||
|
array_unshift( $array, $value );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$array = [ $key => $value ] + $array;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update array add or delete value
|
||
|
*
|
||
|
* @param array $array Array to modify. Is passed by reference, and no return is needed.
|
||
|
* @param array $value Value to add or delete.
|
||
|
*/
|
||
|
public static function add_delete_value( &$array, $value ) {
|
||
|
if ( ( $key = array_search( $value, $array ) ) !== false ) { // @codingStandardsIgnoreLine
|
||
|
unset( $array[ $key ] );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$array[] = $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create an array from string.
|
||
|
*
|
||
|
* @param string $string The string to split.
|
||
|
* @param string $separator Specifies where to break the string.
|
||
|
*
|
||
|
* @return array Returns an array after applying the function to each one.
|
||
|
*/
|
||
|
public static function from_string( $string, $separator = ',' ) {
|
||
|
return array_values( array_filter( array_map( 'trim', explode( $separator, $string ) ) ) );
|
||
|
}
|
||
|
}
|