Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/flow-flo.../libs/cakephp/utility
File: Hash.php
if (!empty($group)) {
[500] Fix | Delete
$c = is_array($keys) ? count($keys) : count($vals);
[501] Fix | Delete
$out = [];
[502] Fix | Delete
for ($i = 0; $i < $c; $i++) {
[503] Fix | Delete
if (!isset($group[$i])) {
[504] Fix | Delete
$group[$i] = 0;
[505] Fix | Delete
}
[506] Fix | Delete
if (!isset($out[$group[$i]])) {
[507] Fix | Delete
$out[$group[$i]] = [];
[508] Fix | Delete
}
[509] Fix | Delete
if ($keys === null) {
[510] Fix | Delete
$out[$group[$i]][] = $vals[$i];
[511] Fix | Delete
} else {
[512] Fix | Delete
$out[$group[$i]][$keys[$i]] = $vals[$i];
[513] Fix | Delete
}
[514] Fix | Delete
}
[515] Fix | Delete
[516] Fix | Delete
return $out;
[517] Fix | Delete
}
[518] Fix | Delete
}
[519] Fix | Delete
if (empty($vals)) {
[520] Fix | Delete
return [];
[521] Fix | Delete
}
[522] Fix | Delete
[523] Fix | Delete
return array_combine($keys === null ? range(0, count($vals) - 1) : $keys, $vals);
[524] Fix | Delete
}
[525] Fix | Delete
[526] Fix | Delete
/**
[527] Fix | Delete
* Returns a formatted series of values extracted from `$data`, using
[528] Fix | Delete
* `$format` as the format and `$paths` as the values to extract.
[529] Fix | Delete
*
[530] Fix | Delete
* Usage:
[531] Fix | Delete
*
[532] Fix | Delete
* ```
[533] Fix | Delete
* $result = Hash::format($users, ['{n}.User.id', '{n}.User.name'], '%s : %s');
[534] Fix | Delete
* ```
[535] Fix | Delete
*
[536] Fix | Delete
* The `$format` string can use any format options that `vsprintf()` and `sprintf()` do.
[537] Fix | Delete
*
[538] Fix | Delete
* @param array $data Source array from which to extract the data
[539] Fix | Delete
* @param string[] $paths An array containing one or more Hash::extract()-style key paths
[540] Fix | Delete
* @param string $format Format string into which values will be inserted, see sprintf()
[541] Fix | Delete
* @return string[]|null An array of strings extracted from `$path` and formatted with `$format`
[542] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::format
[543] Fix | Delete
* @see sprintf()
[544] Fix | Delete
* @see \Cake\Utility\Hash::extract()
[545] Fix | Delete
*/
[546] Fix | Delete
public static function format(array $data, array $paths, $format)
[547] Fix | Delete
{
[548] Fix | Delete
$extracted = [];
[549] Fix | Delete
$count = count($paths);
[550] Fix | Delete
[551] Fix | Delete
if (!$count) {
[552] Fix | Delete
return null;
[553] Fix | Delete
}
[554] Fix | Delete
[555] Fix | Delete
for ($i = 0; $i < $count; $i++) {
[556] Fix | Delete
$extracted[] = static::extract($data, $paths[$i]);
[557] Fix | Delete
}
[558] Fix | Delete
$out = [];
[559] Fix | Delete
$data = $extracted;
[560] Fix | Delete
$count = count($data[0]);
[561] Fix | Delete
[562] Fix | Delete
$countTwo = count($data);
[563] Fix | Delete
for ($j = 0; $j < $count; $j++) {
[564] Fix | Delete
$args = [];
[565] Fix | Delete
for ($i = 0; $i < $countTwo; $i++) {
[566] Fix | Delete
if (array_key_exists($j, $data[$i])) {
[567] Fix | Delete
$args[] = $data[$i][$j];
[568] Fix | Delete
}
[569] Fix | Delete
}
[570] Fix | Delete
$out[] = vsprintf($format, $args);
[571] Fix | Delete
}
[572] Fix | Delete
[573] Fix | Delete
return $out;
[574] Fix | Delete
}
[575] Fix | Delete
[576] Fix | Delete
/**
[577] Fix | Delete
* Determines if one array contains the exact keys and values of another.
[578] Fix | Delete
*
[579] Fix | Delete
* @param array $data The data to search through.
[580] Fix | Delete
* @param array $needle The values to file in $data
[581] Fix | Delete
* @return bool true If $data contains $needle, false otherwise
[582] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::contains
[583] Fix | Delete
*/
[584] Fix | Delete
public static function contains(array $data, array $needle)
[585] Fix | Delete
{
[586] Fix | Delete
if (empty($data) || empty($needle)) {
[587] Fix | Delete
return false;
[588] Fix | Delete
}
[589] Fix | Delete
$stack = [];
[590] Fix | Delete
[591] Fix | Delete
while (!empty($needle)) {
[592] Fix | Delete
$key = key($needle);
[593] Fix | Delete
$val = $needle[$key];
[594] Fix | Delete
unset($needle[$key]);
[595] Fix | Delete
[596] Fix | Delete
if (array_key_exists($key, $data) && is_array($val)) {
[597] Fix | Delete
$next = $data[$key];
[598] Fix | Delete
unset($data[$key]);
[599] Fix | Delete
[600] Fix | Delete
if (!empty($val)) {
[601] Fix | Delete
$stack[] = [$val, $next];
[602] Fix | Delete
}
[603] Fix | Delete
} elseif (!array_key_exists($key, $data) || $data[$key] != $val) {
[604] Fix | Delete
return false;
[605] Fix | Delete
}
[606] Fix | Delete
[607] Fix | Delete
if (empty($needle) && !empty($stack)) {
[608] Fix | Delete
list($needle, $data) = array_pop($stack);
[609] Fix | Delete
}
[610] Fix | Delete
}
[611] Fix | Delete
[612] Fix | Delete
return true;
[613] Fix | Delete
}
[614] Fix | Delete
[615] Fix | Delete
/**
[616] Fix | Delete
* Test whether or not a given path exists in $data.
[617] Fix | Delete
* This method uses the same path syntax as Hash::extract()
[618] Fix | Delete
*
[619] Fix | Delete
* Checking for paths that could target more than one element will
[620] Fix | Delete
* make sure that at least one matching element exists.
[621] Fix | Delete
*
[622] Fix | Delete
* @param array $data The data to check.
[623] Fix | Delete
* @param string $path The path to check for.
[624] Fix | Delete
* @return bool Existence of path.
[625] Fix | Delete
* @see \Cake\Utility\Hash::extract()
[626] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::check
[627] Fix | Delete
*/
[628] Fix | Delete
public static function check(array $data, $path)
[629] Fix | Delete
{
[630] Fix | Delete
$results = static::extract($data, $path);
[631] Fix | Delete
if (!is_array($results)) {
[632] Fix | Delete
return false;
[633] Fix | Delete
}
[634] Fix | Delete
[635] Fix | Delete
return count($results) > 0;
[636] Fix | Delete
}
[637] Fix | Delete
[638] Fix | Delete
/**
[639] Fix | Delete
* Recursively filters a data set.
[640] Fix | Delete
*
[641] Fix | Delete
* @param array $data Either an array to filter, or value when in callback
[642] Fix | Delete
* @param callable|array $callback A function to filter the data with. Defaults to
[643] Fix | Delete
* `static::_filter()` Which strips out all non-zero empty values.
[644] Fix | Delete
* @return array Filtered array
[645] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::filter
[646] Fix | Delete
*/
[647] Fix | Delete
public static function filter(array $data, $callback = ['self', '_filter'])
[648] Fix | Delete
{
[649] Fix | Delete
foreach ($data as $k => $v) {
[650] Fix | Delete
if (is_array($v)) {
[651] Fix | Delete
$data[$k] = static::filter($v, $callback);
[652] Fix | Delete
}
[653] Fix | Delete
}
[654] Fix | Delete
[655] Fix | Delete
return array_filter($data, $callback);
[656] Fix | Delete
}
[657] Fix | Delete
[658] Fix | Delete
/**
[659] Fix | Delete
* Callback function for filtering.
[660] Fix | Delete
*
[661] Fix | Delete
* @param mixed $var Array to filter.
[662] Fix | Delete
* @return bool
[663] Fix | Delete
*/
[664] Fix | Delete
protected static function _filter($var)
[665] Fix | Delete
{
[666] Fix | Delete
return $var === 0 || $var === 0.0 || $var === '0' || !empty($var);
[667] Fix | Delete
}
[668] Fix | Delete
[669] Fix | Delete
/**
[670] Fix | Delete
* Collapses a multi-dimensional array into a single dimension, using a delimited array path for
[671] Fix | Delete
* each array element's key, i.e. [['Foo' => ['Bar' => 'Far']]] becomes
[672] Fix | Delete
* ['0.Foo.Bar' => 'Far'].)
[673] Fix | Delete
*
[674] Fix | Delete
* @param array $data Array to flatten
[675] Fix | Delete
* @param string $separator String used to separate array key elements in a path, defaults to '.'
[676] Fix | Delete
* @return array
[677] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::flatten
[678] Fix | Delete
*/
[679] Fix | Delete
public static function flatten(array $data, $separator = '.')
[680] Fix | Delete
{
[681] Fix | Delete
$result = [];
[682] Fix | Delete
$stack = [];
[683] Fix | Delete
$path = null;
[684] Fix | Delete
[685] Fix | Delete
reset($data);
[686] Fix | Delete
while (!empty($data)) {
[687] Fix | Delete
$key = key($data);
[688] Fix | Delete
$element = $data[$key];
[689] Fix | Delete
unset($data[$key]);
[690] Fix | Delete
[691] Fix | Delete
if (is_array($element) && !empty($element)) {
[692] Fix | Delete
if (!empty($data)) {
[693] Fix | Delete
$stack[] = [$data, $path];
[694] Fix | Delete
}
[695] Fix | Delete
$data = $element;
[696] Fix | Delete
reset($data);
[697] Fix | Delete
$path .= $key . $separator;
[698] Fix | Delete
} else {
[699] Fix | Delete
$result[$path . $key] = $element;
[700] Fix | Delete
}
[701] Fix | Delete
[702] Fix | Delete
if (empty($data) && !empty($stack)) {
[703] Fix | Delete
list($data, $path) = array_pop($stack);
[704] Fix | Delete
reset($data);
[705] Fix | Delete
}
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
return $result;
[709] Fix | Delete
}
[710] Fix | Delete
[711] Fix | Delete
/**
[712] Fix | Delete
* Expands a flat array to a nested array.
[713] Fix | Delete
*
[714] Fix | Delete
* For example, unflattens an array that was collapsed with `Hash::flatten()`
[715] Fix | Delete
* into a multi-dimensional array. So, `['0.Foo.Bar' => 'Far']` becomes
[716] Fix | Delete
* `[['Foo' => ['Bar' => 'Far']]]`.
[717] Fix | Delete
*
[718] Fix | Delete
* @param array $data Flattened array
[719] Fix | Delete
* @param string $separator The delimiter used
[720] Fix | Delete
* @return array
[721] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::expand
[722] Fix | Delete
*/
[723] Fix | Delete
public static function expand(array $data, $separator = '.')
[724] Fix | Delete
{
[725] Fix | Delete
$result = [];
[726] Fix | Delete
foreach ($data as $flat => $value) {
[727] Fix | Delete
$keys = explode($separator, (string)$flat);
[728] Fix | Delete
$keys = array_reverse($keys);
[729] Fix | Delete
$child = [
[730] Fix | Delete
$keys[0] => $value,
[731] Fix | Delete
];
[732] Fix | Delete
array_shift($keys);
[733] Fix | Delete
foreach ($keys as $k) {
[734] Fix | Delete
$child = [
[735] Fix | Delete
$k => $child,
[736] Fix | Delete
];
[737] Fix | Delete
}
[738] Fix | Delete
[739] Fix | Delete
$stack = [[$child, &$result]];
[740] Fix | Delete
static::_merge($stack, $result);
[741] Fix | Delete
}
[742] Fix | Delete
[743] Fix | Delete
return $result;
[744] Fix | Delete
}
[745] Fix | Delete
[746] Fix | Delete
/**
[747] Fix | Delete
* This function can be thought of as a hybrid between PHP's `array_merge` and `array_merge_recursive`.
[748] Fix | Delete
*
[749] Fix | Delete
* The difference between this method and the built-in ones, is that if an array key contains another array, then
[750] Fix | Delete
* Hash::merge() will behave in a recursive fashion (unlike `array_merge`). But it will not act recursively for
[751] Fix | Delete
* keys that contain scalar values (unlike `array_merge_recursive`).
[752] Fix | Delete
*
[753] Fix | Delete
* Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays.
[754] Fix | Delete
*
[755] Fix | Delete
* @param array $data Array to be merged
[756] Fix | Delete
* @param mixed $merge Array to merge with. The argument and all trailing arguments will be array cast when merged
[757] Fix | Delete
* @return array Merged array
[758] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::merge
[759] Fix | Delete
*/
[760] Fix | Delete
public static function merge(array $data, $merge)
[761] Fix | Delete
{
[762] Fix | Delete
$args = array_slice(func_get_args(), 1);
[763] Fix | Delete
$return = $data;
[764] Fix | Delete
$stack = [];
[765] Fix | Delete
[766] Fix | Delete
foreach ($args as &$curArg) {
[767] Fix | Delete
$stack[] = [(array)$curArg, &$return];
[768] Fix | Delete
}
[769] Fix | Delete
unset($curArg);
[770] Fix | Delete
static::_merge($stack, $return);
[771] Fix | Delete
[772] Fix | Delete
return $return;
[773] Fix | Delete
}
[774] Fix | Delete
[775] Fix | Delete
/**
[776] Fix | Delete
* Merge helper function to reduce duplicated code between merge() and expand().
[777] Fix | Delete
*
[778] Fix | Delete
* @param array $stack The stack of operations to work with.
[779] Fix | Delete
* @param array $return The return value to operate on.
[780] Fix | Delete
* @return void
[781] Fix | Delete
*/
[782] Fix | Delete
protected static function _merge($stack, &$return)
[783] Fix | Delete
{
[784] Fix | Delete
while (!empty($stack)) {
[785] Fix | Delete
foreach ($stack as $curKey => &$curMerge) {
[786] Fix | Delete
foreach ($curMerge[0] as $key => &$val) {
[787] Fix | Delete
$isArray = is_array($curMerge[1]);
[788] Fix | Delete
if ($isArray && !empty($curMerge[1][$key]) && (array)$curMerge[1][$key] === $curMerge[1][$key] && (array)$val === $val) {
[789] Fix | Delete
// Recurse into the current merge data as it is an array.
[790] Fix | Delete
$stack[] = [&$val, &$curMerge[1][$key]];
[791] Fix | Delete
} elseif ((int)$key === $key && $isArray && isset($curMerge[1][$key])) {
[792] Fix | Delete
$curMerge[1][] = $val;
[793] Fix | Delete
} else {
[794] Fix | Delete
$curMerge[1][$key] = $val;
[795] Fix | Delete
}
[796] Fix | Delete
}
[797] Fix | Delete
unset($stack[$curKey]);
[798] Fix | Delete
}
[799] Fix | Delete
unset($curMerge);
[800] Fix | Delete
}
[801] Fix | Delete
}
[802] Fix | Delete
[803] Fix | Delete
/**
[804] Fix | Delete
* Checks to see if all the values in the array are numeric
[805] Fix | Delete
*
[806] Fix | Delete
* @param array $data The array to check.
[807] Fix | Delete
* @return bool true if values are numeric, false otherwise
[808] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::numeric
[809] Fix | Delete
*/
[810] Fix | Delete
public static function numeric(array $data)
[811] Fix | Delete
{
[812] Fix | Delete
if (empty($data)) {
[813] Fix | Delete
return false;
[814] Fix | Delete
}
[815] Fix | Delete
[816] Fix | Delete
return $data === array_filter($data, 'is_numeric');
[817] Fix | Delete
}
[818] Fix | Delete
[819] Fix | Delete
/**
[820] Fix | Delete
* Counts the dimensions of an array.
[821] Fix | Delete
* Only considers the dimension of the first element in the array.
[822] Fix | Delete
*
[823] Fix | Delete
* If you have an un-even or heterogeneous array, consider using Hash::maxDimensions()
[824] Fix | Delete
* to get the dimensions of the array.
[825] Fix | Delete
*
[826] Fix | Delete
* @param array $data Array to count dimensions on
[827] Fix | Delete
* @return int The number of dimensions in $data
[828] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::dimensions
[829] Fix | Delete
*/
[830] Fix | Delete
public static function dimensions(array $data)
[831] Fix | Delete
{
[832] Fix | Delete
if (empty($data)) {
[833] Fix | Delete
return 0;
[834] Fix | Delete
}
[835] Fix | Delete
reset($data);
[836] Fix | Delete
$depth = 1;
[837] Fix | Delete
while ($elem = array_shift($data)) {
[838] Fix | Delete
if (is_array($elem)) {
[839] Fix | Delete
$depth++;
[840] Fix | Delete
$data = $elem;
[841] Fix | Delete
} else {
[842] Fix | Delete
break;
[843] Fix | Delete
}
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
return $depth;
[847] Fix | Delete
}
[848] Fix | Delete
[849] Fix | Delete
/**
[850] Fix | Delete
* Counts the dimensions of *all* array elements. Useful for finding the maximum
[851] Fix | Delete
* number of dimensions in a mixed array.
[852] Fix | Delete
*
[853] Fix | Delete
* @param array $data Array to count dimensions on
[854] Fix | Delete
* @return int The maximum number of dimensions in $data
[855] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::maxDimensions
[856] Fix | Delete
*/
[857] Fix | Delete
public static function maxDimensions(array $data)
[858] Fix | Delete
{
[859] Fix | Delete
$depth = [];
[860] Fix | Delete
if (is_array($data) && !empty($data)) {
[861] Fix | Delete
foreach ($data as $value) {
[862] Fix | Delete
if (is_array($value)) {
[863] Fix | Delete
$depth[] = static::maxDimensions($value) + 1;
[864] Fix | Delete
} else {
[865] Fix | Delete
$depth[] = 1;
[866] Fix | Delete
}
[867] Fix | Delete
}
[868] Fix | Delete
}
[869] Fix | Delete
[870] Fix | Delete
return empty($depth) ? 0 : max($depth);
[871] Fix | Delete
}
[872] Fix | Delete
[873] Fix | Delete
/**
[874] Fix | Delete
* Map a callback across all elements in a set.
[875] Fix | Delete
* Can be provided a path to only modify slices of the set.
[876] Fix | Delete
*
[877] Fix | Delete
* @param array $data The data to map over, and extract data out of.
[878] Fix | Delete
* @param string $path The path to extract for mapping over.
[879] Fix | Delete
* @param callable $function The function to call on each extracted value.
[880] Fix | Delete
* @return array An array of the modified values.
[881] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::map
[882] Fix | Delete
*/
[883] Fix | Delete
public static function map(array $data, $path, $function)
[884] Fix | Delete
{
[885] Fix | Delete
$values = (array)static::extract($data, $path);
[886] Fix | Delete
[887] Fix | Delete
return array_map($function, $values);
[888] Fix | Delete
}
[889] Fix | Delete
[890] Fix | Delete
/**
[891] Fix | Delete
* Reduce a set of extracted values using `$function`.
[892] Fix | Delete
*
[893] Fix | Delete
* @param array $data The data to reduce.
[894] Fix | Delete
* @param string $path The path to extract from $data.
[895] Fix | Delete
* @param callable $function The function to call on each extracted value.
[896] Fix | Delete
* @return mixed The reduced value.
[897] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::reduce
[898] Fix | Delete
*/
[899] Fix | Delete
public static function reduce(array $data, $path, $function)
[900] Fix | Delete
{
[901] Fix | Delete
$values = (array)static::extract($data, $path);
[902] Fix | Delete
[903] Fix | Delete
return array_reduce($values, $function);
[904] Fix | Delete
}
[905] Fix | Delete
[906] Fix | Delete
/**
[907] Fix | Delete
* Apply a callback to a set of extracted values using `$function`.
[908] Fix | Delete
* The function will get the extracted values as the first argument.
[909] Fix | Delete
*
[910] Fix | Delete
* ### Example
[911] Fix | Delete
*
[912] Fix | Delete
* You can easily count the results of an extract using apply().
[913] Fix | Delete
* For example to count the comments on an Article:
[914] Fix | Delete
*
[915] Fix | Delete
* ```
[916] Fix | Delete
* $count = Hash::apply($data, 'Article.Comment.{n}', 'count');
[917] Fix | Delete
* ```
[918] Fix | Delete
*
[919] Fix | Delete
* You could also use a function like `array_sum` to sum the results.
[920] Fix | Delete
*
[921] Fix | Delete
* ```
[922] Fix | Delete
* $total = Hash::apply($data, '{n}.Item.price', 'array_sum');
[923] Fix | Delete
* ```
[924] Fix | Delete
*
[925] Fix | Delete
* @param array $data The data to reduce.
[926] Fix | Delete
* @param string $path The path to extract from $data.
[927] Fix | Delete
* @param callable $function The function to call on each extracted value.
[928] Fix | Delete
* @return mixed The results of the applied method.
[929] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::apply
[930] Fix | Delete
*/
[931] Fix | Delete
public static function apply(array $data, $path, $function)
[932] Fix | Delete
{
[933] Fix | Delete
$values = (array)static::extract($data, $path);
[934] Fix | Delete
[935] Fix | Delete
return call_user_func($function, $values);
[936] Fix | Delete
}
[937] Fix | Delete
[938] Fix | Delete
/**
[939] Fix | Delete
* Sorts an array by any value, determined by a Set-compatible path
[940] Fix | Delete
*
[941] Fix | Delete
* ### Sort directions
[942] Fix | Delete
*
[943] Fix | Delete
* - `asc` Sort ascending.
[944] Fix | Delete
* - `desc` Sort descending.
[945] Fix | Delete
*
[946] Fix | Delete
* ### Sort types
[947] Fix | Delete
*
[948] Fix | Delete
* - `regular` For regular sorting (don't change types)
[949] Fix | Delete
* - `numeric` Compare values numerically
[950] Fix | Delete
* - `string` Compare values as strings
[951] Fix | Delete
* - `locale` Compare items as strings, based on the current locale
[952] Fix | Delete
* - `natural` Compare items as strings using "natural ordering" in a human friendly way
[953] Fix | Delete
* Will sort foo10 below foo2 as an example.
[954] Fix | Delete
*
[955] Fix | Delete
* To do case insensitive sorting, pass the type as an array as follows:
[956] Fix | Delete
*
[957] Fix | Delete
* ```
[958] Fix | Delete
* Hash::sort($data, 'some.attribute', 'asc', ['type' => 'regular', 'ignoreCase' => true]);
[959] Fix | Delete
* ```
[960] Fix | Delete
*
[961] Fix | Delete
* When using the array form, `type` defaults to 'regular'. The `ignoreCase` option
[962] Fix | Delete
* defaults to `false`.
[963] Fix | Delete
*
[964] Fix | Delete
* @param array $data An array of data to sort
[965] Fix | Delete
* @param string $path A Set-compatible path to the array value
[966] Fix | Delete
* @param string $dir See directions above. Defaults to 'asc'.
[967] Fix | Delete
* @param array|string $type See direction types above. Defaults to 'regular'.
[968] Fix | Delete
* @return array Sorted array of data
[969] Fix | Delete
* @link https://book.cakephp.org/3/en/core-libraries/hash.html#Cake\Utility\Hash::sort
[970] Fix | Delete
*/
[971] Fix | Delete
public static function sort(array $data, $path, $dir = 'asc', $type = 'regular')
[972] Fix | Delete
{
[973] Fix | Delete
if (empty($data)) {
[974] Fix | Delete
return [];
[975] Fix | Delete
}
[976] Fix | Delete
$originalKeys = array_keys($data);
[977] Fix | Delete
$numeric = is_numeric(implode('', $originalKeys));
[978] Fix | Delete
if ($numeric) {
[979] Fix | Delete
$data = array_values($data);
[980] Fix | Delete
}
[981] Fix | Delete
$sortValues = static::extract($data, $path);
[982] Fix | Delete
$dataCount = count($data);
[983] Fix | Delete
[984] Fix | Delete
// Make sortValues match the data length, as some keys could be missing
[985] Fix | Delete
// the sorted value path.
[986] Fix | Delete
$missingData = count($sortValues) < $dataCount;
[987] Fix | Delete
if ($missingData && $numeric) {
[988] Fix | Delete
// Get the path without the leading '{n}.'
[989] Fix | Delete
$itemPath = substr($path, 4);
[990] Fix | Delete
foreach ($data as $key => $value) {
[991] Fix | Delete
$sortValues[$key] = static::get($value, $itemPath);
[992] Fix | Delete
}
[993] Fix | Delete
} elseif ($missingData) {
[994] Fix | Delete
$sortValues = array_pad($sortValues, $dataCount, null);
[995] Fix | Delete
}
[996] Fix | Delete
$result = static::_squash($sortValues);
[997] Fix | Delete
$keys = static::extract($result, '{n}.id');
[998] Fix | Delete
$values = static::extract($result, '{n}.value');
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function