2021-02-26 16:16:17 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Safe;
|
|
|
|
|
|
|
|
use Safe\Exceptions\ArrayException;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Applies the user-defined callback function to each
|
|
|
|
* element of the array. This function will recurse
|
|
|
|
* into deeper arrays.
|
|
|
|
*
|
2022-07-12 19:26:21 +00:00
|
|
|
* @param array|object $array The input array.
|
2021-02-26 16:16:17 +00:00
|
|
|
* @param callable $callback Typically, callback takes on two parameters.
|
|
|
|
* The array parameter's value being the first, and
|
|
|
|
* the key/index second.
|
|
|
|
*
|
|
|
|
* If callback needs to be working with the
|
|
|
|
* actual values of the array, specify the first parameter of
|
|
|
|
* callback as a
|
|
|
|
* reference. Then,
|
|
|
|
* any changes made to those elements will be made in the
|
|
|
|
* original array itself.
|
2022-07-12 19:26:21 +00:00
|
|
|
* @param mixed $arg If the optional arg parameter is supplied,
|
2021-02-26 16:16:17 +00:00
|
|
|
* it will be passed as the third parameter to the
|
|
|
|
* callback.
|
|
|
|
* @throws ArrayException
|
|
|
|
*
|
|
|
|
*/
|
2022-07-12 19:26:21 +00:00
|
|
|
function array_walk_recursive(&$array, callable $callback, $arg = null): void
|
2021-02-26 16:16:17 +00:00
|
|
|
{
|
|
|
|
error_clear_last();
|
2022-07-12 19:26:21 +00:00
|
|
|
if ($arg !== null) {
|
|
|
|
$result = \array_walk_recursive($array, $callback, $arg);
|
|
|
|
} else {
|
|
|
|
$result = \array_walk_recursive($array, $callback);
|
2021-02-26 16:16:17 +00:00
|
|
|
}
|
|
|
|
if ($result === false) {
|
|
|
|
throw ArrayException::createFromPhpError();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function shuffles (randomizes the order of the elements in) an array.
|
|
|
|
* It uses a pseudo random number generator that is not suitable for
|
|
|
|
* cryptographic purposes.
|
|
|
|
*
|
|
|
|
* @param array $array The array.
|
|
|
|
* @throws ArrayException
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function shuffle(array &$array): void
|
|
|
|
{
|
|
|
|
error_clear_last();
|
|
|
|
$result = \shuffle($array);
|
|
|
|
if ($result === false) {
|
|
|
|
throw ArrayException::createFromPhpError();
|
|
|
|
}
|
|
|
|
}
|