2018-07-30 21:24:26 -04:00
|
|
|
<?php
|
|
|
|
/**
|
2023-01-01 09:36:24 -05:00
|
|
|
* @copyright Copyright (C) 2010-2023, the Friendica project
|
2020-02-09 10:18:46 -05:00
|
|
|
*
|
|
|
|
* @license GNU AGPL version 3 or any later version
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*
|
2018-07-30 21:24:26 -04:00
|
|
|
*/
|
2020-02-09 10:18:46 -05:00
|
|
|
|
2018-07-30 21:24:26 -04:00
|
|
|
namespace Friendica\Util;
|
|
|
|
|
|
|
|
/**
|
2020-01-19 01:05:23 -05:00
|
|
|
* Array utility class
|
2018-07-30 21:24:26 -04:00
|
|
|
*/
|
|
|
|
class Arrays
|
|
|
|
{
|
|
|
|
/**
|
2020-01-19 01:05:23 -05:00
|
|
|
* Private constructor
|
2018-07-30 21:24:26 -04:00
|
|
|
*/
|
2021-11-08 17:10:07 -05:00
|
|
|
private function __construct() {
|
2023-03-22 00:08:53 -04:00
|
|
|
// Utilities don't have instances
|
2018-07-30 21:24:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-01-19 15:44:01 -05:00
|
|
|
* Implodes recursively a multi-dimensional array where a normal implode() will fail.
|
2018-07-30 21:24:26 -04:00
|
|
|
*
|
|
|
|
* @param array $array Array to implode
|
|
|
|
* @param string $glue Glue for imploded elements
|
|
|
|
* @return string String with elements from array
|
|
|
|
*/
|
2021-11-08 17:10:07 -05:00
|
|
|
public static function recursiveImplode(array $array, $glue) {
|
2018-07-30 21:24:26 -04:00
|
|
|
// Init returned string
|
|
|
|
$string = '';
|
|
|
|
|
|
|
|
// Loop through all records
|
|
|
|
foreach ($array as $element) {
|
|
|
|
// Is an array found?
|
|
|
|
if (is_array($element)) {
|
|
|
|
// Invoke cursively
|
|
|
|
$string .= '{' . self::recursiveImplode($element, $glue) . '}' . $glue;
|
|
|
|
} else {
|
|
|
|
// Append normally
|
|
|
|
$string .= $element . $glue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove last glue
|
|
|
|
$string = trim($string, $glue);
|
|
|
|
|
|
|
|
// Return it
|
|
|
|
return $string;
|
|
|
|
}
|
2021-11-08 17:10:07 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* walks recursively through an array with the possibility to change value and key
|
|
|
|
*
|
|
|
|
* @param array $array The array to walk through
|
|
|
|
* @param callable $callback The callback function
|
|
|
|
*
|
|
|
|
* @return array the transformed array
|
|
|
|
*/
|
2021-11-09 00:23:04 -05:00
|
|
|
public static function walkRecursive(array &$array, callable $callback)
|
2021-11-08 17:10:07 -05:00
|
|
|
{
|
|
|
|
$new_array = [];
|
|
|
|
|
|
|
|
foreach ($array as $k => $v) {
|
|
|
|
if (is_array($v)) {
|
|
|
|
if ($callback($v, $k)) {
|
|
|
|
$new_array[$k] = self::walkRecursive($v, $callback);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($callback($v, $k)) {
|
|
|
|
$new_array[$k] = $v;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$array = $new_array;
|
|
|
|
|
|
|
|
return $array;
|
|
|
|
}
|
2018-07-30 21:24:26 -04:00
|
|
|
}
|