Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/domains/alsaif.group/public_html/libraries/regularlabs/src/ |
<?php
/**
* @package Regular Labs Library
* @version 23.9.3039
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2023 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
namespace RegularLabs\Library;
defined('_JEXEC') or die;
/**
* Class ArrayHelper
*
* @package RegularLabs\Library
*/
class ArrayHelper
{
/**
* Add a postfix to all keys in an array
*
* @param array $array
* @param string $postfix
*
* @return array
*/
public static function AddPostfixToKeys($array, $postfix)
{
$pefixed = [];
foreach ($array as $key => $value)
{
$pefixed[StringHelper::addPostfix($key, $postfix)] = $value;
}
return $pefixed;
}
/**
* Add a postfix to all string values in an array
*
* @param array $array
* @param string $postfix
*
* @return array
*/
public static function AddPostfixToValues($array, $postfix)
{
foreach ($array as &$value)
{
$value = StringHelper::addPostfix($value, $postfix);
}
return $array;
}
/**
* Add a prefix to all keys in an array
*
* @param array $array
* @param string $prefix
*
* @return array
*/
public static function AddPrefixToKeys($array, $prefix)
{
$pefixed = [];
foreach ($array as $key => $value)
{
$pefixed[StringHelper::addPrefix($key, $prefix)] = $value;
}
return $pefixed;
}
/**
* Add a prefix to all string values in an array
*
* @param array $array
* @param string $prefix
* @param bool $keep_leading_slash
*
* @return array
*/
public static function AddPrefixToValues($array, $prefix, $keep_leading_slash = true)
{
foreach ($array as &$value)
{
$value = StringHelper::addPrefix($value, $prefix, $keep_leading_slash);
}
return $array;
}
/**
* Run a method over all values inside the array or object
*
* @param array $attributes
* @param string $class
* @param string $method
*
* @return array|object
*/
public static function applyMethodToKeys($attributes, $class = '', $method = '')
{
if ( ! $class || ! $method)
{
$caller = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1];
$class = $caller['class'];
$method = $caller['function'];
}
$array = array_shift($attributes);
if ( ! is_array($array) && ! is_object($array))
{
return null;
}
if (empty($array))
{
return $array;
}
$json = json_encode($array);
foreach ($array as $key => $value)
{
$value_attributes = [$key] + $attributes;
$json = str_replace(
'"' . $key . '":',
'"' . $class::$method(...$value_attributes) . '":',
$json
);
}
return json_decode($json);
}
/**
* Run a method over all values inside the array or object
*
* @param array $attributes
* @param string $class
* @param string $method
*
* @return array|object
*/
public static function applyMethodToValues($attributes, $class = '', $method = '')
{
if ( ! $class || ! $method)
{
$caller = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1];
$class = $caller['class'];
$method = $caller['function'];
}
$array = array_shift($attributes);
if ( ! is_array($array) && ! is_object($array))
{
return null;
}
foreach ($array as &$value)
{
if ( ! is_string($value))
{
continue;
}
$value_attributes = array_merge([$value], $attributes);
$value = $class::$method(...$value_attributes);
}
return $array;
}
/**
* Clean array by trimming values and removing empty/false values
*
* @param array $array
*
* @return array
*/
public static function clean($array)
{
if ( ! is_array($array))
{
return $array;
}
$array = self::trim($array);
$array = self::unique($array);
$array = self::removeEmpty($array);
return $array;
}
/**
* Check if any of the given values is found in the array
*
* @param array $needles
* @param array $haystack
*
* @return boolean
*/
public static function find($needles, $haystack)
{
if ( ! is_array($haystack) || empty($haystack))
{
return false;
}
$needles = self::toArray($needles);
foreach ($needles as $value)
{
if (in_array($value, $haystack))
{
return true;
}
}
return false;
}
/**
* Flatten an array of nested arrays, keeping the order
*
* @param array $array
*
* @return array
*/
public static function flatten($array)
{
$flattened = [];
foreach ($array as $nested)
{
if ( ! is_array($nested))
{
$flattened[] = $nested;
continue;
}
$flattened = array_merge($flattened, self::flatten($nested));
}
return $flattened;
}
/**
* Join array elements with a string
*
* @param array|string $pieces
* @param string $glue
* @param string $last_glue
*
* @return string
*/
public static function implode($pieces, $glue = '', $last_glue = null)
{
if ( ! is_array($pieces))
{
$pieces = self::toArray($pieces, $glue);
}
if (
is_null($last_glue)
|| $last_glue == $glue
|| count($pieces) < 2
)
{
return implode($glue, $pieces);
}
$last_item = array_pop($pieces);
return implode($glue, $pieces) . $last_glue . $last_item;
}
/**
* Removes empty values from the array
*
* @param array $array
*
* @return array
*/
public static function removeEmpty($array)
{
if ( ! is_array($array))
{
return $array;
}
foreach ($array as $key => &$value)
{
if ($key && ! is_numeric($key))
{
continue;
}
if ($value !== '')
{
continue;
}
unset($array[$key]);
}
return $array;
}
/**
* Removes the trailing part of all keys in an array
*
* @param array $array
* @param string $postfix
*
* @return array
*/
public static function removePostfixFromKeys($array, $postfix)
{
$pefixed = [];
foreach ($array as $key => $value)
{
$pefixed[StringHelper::removePostfix($key, $postfix)] = $value;
}
return $pefixed;
}
/**
* Removes the trailing part of all string values in an array
*
* @param array $array
* @param string $postfix
*
* @return array
*/
public static function removePostfixFromValues($array, $postfix)
{
foreach ($array as &$value)
{
$value = StringHelper::removePostfix($value, $postfix);
}
return $array;
}
/**
* Removes the first part of all keys in an array
*
* @param array $array
* @param string $prefix
*
* @return array
*/
public static function removePrefixFromKeys($array, $prefix)
{
$pefixed = [];
foreach ($array as $key => $value)
{
$pefixed[StringHelper::removePrefix($key, $prefix)] = $value;
}
return $pefixed;
}
/**
* Removes the first part of all string values in an array
*
* @param array $array
* @param string $prefix
* @param bool $keep_leading_slash
*
* @return array
*/
public static function removePrefixFromValues($array, $prefix, $keep_leading_slash = true)
{
foreach ($array as &$value)
{
$value = StringHelper::removePrefix($value, $prefix, $keep_leading_slash);
}
return $array;
}
/**
* Sorts the array by keys based on the values of another array
*
* @param array $array
* @param array $order
*
* @return array
*/
public static function sortByOtherArray($array, $order)
{
if (empty($order))
{
return $array;
}
uksort($array, function ($key1, $key2) use ($order) {
return array_search($key1, $order) > array_search($key2, $order);
});
return $array;
}
/**
* Convert data (string or object) to an array
*
* @param mixed $data
* @param string $separator
* @param bool $unique
*
* @return array
*/
public static function toArray($data, $separator = ',', $unique = false, $trim = true)
{
if (is_array($data))
{
return $data;
}
if (is_object($data))
{
return (array) $data;
}
if ($data === '' || is_null($data))
{
return [];
}
if ($separator === '')
{
return [$data];
}
// explode on separator, but keep escaped separators
$splitter = uniqid('RL_SPLIT');
$data = str_replace($separator, $splitter, $data);
$data = str_replace('\\' . $splitter, $separator, $data);
$array = explode($splitter, $data);
if ($trim)
{
$array = self::trim($array);
}
if ($unique)
{
$array = array_unique($array);
}
return $array;
}
/**
* Clean array by trimming values
*
* @param array $array
*
* @return array
*/
public static function trim($array)
{
if ( ! is_array($array))
{
return $array;
}
foreach ($array as &$value)
{
if ( ! is_string($value))
{
continue;
}
$value = trim($value);
}
return $array;
}
/**
* Removes duplicate values from the array
*
* @param array $array
*
* @return array
*/
public static function unique($array)
{
if ( ! is_array($array))
{
return $array;
}
$values = [];
foreach ($array as $key => $value)
{
if ( ! is_numeric($key))
{
continue;
}
if ( ! in_array($value, $values))
{
$values[] = $value;
continue;
}
unset($array[$key]);
}
return $array;
}
}