mirror of
https://github.com/e107inc/e107.git
synced 2025-08-05 22:27:34 +02:00
Add: e_parse::toFlatArray() and e_parse::fromFlatArray()
Utility functions to convert multi-dimensional arrays to slash-delimited single-dimensional arrays and vice versa
This commit is contained in:
@@ -1806,6 +1806,65 @@ class e_parse
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flatten a multi-dimensional associative array with slashes.
|
||||||
|
*
|
||||||
|
* Based on Illuminate\Support\Arr::dot()
|
||||||
|
* @copyright Copyright (c) Taylor Otwell
|
||||||
|
* @license https://github.com/illuminate/support/blob/master/LICENSE.md MIT License
|
||||||
|
* @param $array
|
||||||
|
* @param string $prepend
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function toFlatArray($array, $prepend = '')
|
||||||
|
{
|
||||||
|
$results = [];
|
||||||
|
|
||||||
|
foreach ($array as $key => $value)
|
||||||
|
{
|
||||||
|
if (is_array($value) && !empty($value))
|
||||||
|
{
|
||||||
|
$results = array_merge($results, static::toFlatArray($value, $prepend . $key . '/'));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$results[$prepend . $key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a flattened slash-delimited multi-dimensional array back into an actual multi-dimensional array
|
||||||
|
*
|
||||||
|
* Inverse of {@link e_parse::toFlatArray()}
|
||||||
|
*
|
||||||
|
* @param $array
|
||||||
|
* @param string $unprepend
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function fromFlatArray($array, $unprepend = '')
|
||||||
|
{
|
||||||
|
$output = [];
|
||||||
|
foreach ($array as $key => $value)
|
||||||
|
{
|
||||||
|
if (!empty($unprepend) && substr($key, 0, strlen($unprepend)) == $unprepend)
|
||||||
|
$key = substr($key, strlen($unprepend));
|
||||||
|
$parts = explode('/', $key);
|
||||||
|
$nested = &$output;
|
||||||
|
while (count($parts) > 1)
|
||||||
|
{
|
||||||
|
$nested = &$nested[array_shift($parts)];
|
||||||
|
if (!is_array($nested)) $nested = [];
|
||||||
|
}
|
||||||
|
$nested[array_shift($parts)] = $value;
|
||||||
|
}
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert text blocks which are to be embedded within JS
|
* Convert text blocks which are to be embedded within JS
|
||||||
*
|
*
|
||||||
|
@@ -656,7 +656,7 @@ class social_ui extends e_admin_ui
|
|||||||
<tr><td>".LAN_TYPE."</td><td>$provider_type</td></tr>
|
<tr><td>".LAN_TYPE."</td><td>$provider_type</td></tr>
|
||||||
";
|
";
|
||||||
|
|
||||||
$fieldInfo = self::array_slash($slcm->getFieldsOf($provider_name));
|
$fieldInfo = e107::getParser()->toFlatArray($slcm->getFieldsOf($provider_name));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -706,7 +706,7 @@ class social_ui extends e_admin_ui
|
|||||||
";
|
";
|
||||||
|
|
||||||
$text .= "<td><table class='table table-bordered table-condensed' style='margin:0'>";
|
$text .= "<td><table class='table table-bordered table-condensed' style='margin:0'>";
|
||||||
$fieldInfo = self::array_slash($slcm->getFieldsOf($provider_name));
|
$fieldInfo = e107::getParser()->toFlatArray($slcm->getFieldsOf($provider_name));
|
||||||
foreach ($fieldInfo as $fieldSlash => $description)
|
foreach ($fieldInfo as $fieldSlash => $description)
|
||||||
{
|
{
|
||||||
$field = str_replace("/", "][", $fieldSlash);
|
$field = str_replace("/", "][", $fieldSlash);
|
||||||
@@ -748,33 +748,6 @@ class social_ui extends e_admin_ui
|
|||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Based on Illuminate\Support\Arr::dot()
|
|
||||||
* @copyright Copyright (c) Taylor Otwell
|
|
||||||
* @license https://github.com/illuminate/support/blob/master/LICENSE.md MIT License
|
|
||||||
* @param $array
|
|
||||||
* @param string $prepend
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private static function array_slash($array, $prepend = '')
|
|
||||||
{
|
|
||||||
$results = [];
|
|
||||||
|
|
||||||
foreach ($array as $key => $value)
|
|
||||||
{
|
|
||||||
if (is_array($value) && !empty($value))
|
|
||||||
{
|
|
||||||
$results = array_merge($results, static::array_slash($value, $prepend . $key . '/'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$results[$prepend . $key] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function getPlaceholderFor($providerName, $fieldSlash)
|
private static function getPlaceholderFor($providerName, $fieldSlash)
|
||||||
{
|
{
|
||||||
switch ($fieldSlash)
|
switch ($fieldSlash)
|
||||||
|
@@ -583,6 +583,44 @@ while($row = $sql->fetch())
|
|||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
public function testToFlatArray()
|
||||||
|
{
|
||||||
|
$input = [
|
||||||
|
'a' => [
|
||||||
|
'b' => [
|
||||||
|
'c' => 'value',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$expected = [
|
||||||
|
'prepend/xyza/b/c' => 'value'
|
||||||
|
];
|
||||||
|
|
||||||
|
$tp = $this->tp;
|
||||||
|
$actual = $tp->toFlatArray($input, 'prepend/xyz');
|
||||||
|
|
||||||
|
$this->assertSame($expected, $actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFromFlatArray()
|
||||||
|
{
|
||||||
|
$input = [
|
||||||
|
'prepend/xyza/b/c' => 'value'
|
||||||
|
];
|
||||||
|
$expected = [
|
||||||
|
'a' => [
|
||||||
|
'b' => [
|
||||||
|
'c' => 'value',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$tp = $this->tp;
|
||||||
|
$actual = $tp->fromFlatArray($input, 'prepend/xyz');
|
||||||
|
|
||||||
|
$this->assertSame($expected, $actual);
|
||||||
|
}
|
||||||
|
|
||||||
public function testToForm()
|
public function testToForm()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user