|
Apache/2.4.41 (Ubuntu) Linux vmi616275.contaboserver.net 5.4.0-84-generic #94-Ubuntu SMP Thu Aug 26 20:27:37 UTC 2021 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) server ip : 62.171.164.128 | your ip : 127.0.0.1 safemode OFF > / home / a / home / dev2.destoffenstraat.com / vendor / magento / framework / Convert / |
Filename | /home/a/home/dev2.destoffenstraat.com/vendor/magento/framework/Convert/ConvertArray.php |
Size | 3.42 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 21-Aug-2025 12:26 |
Last modified | 07-Jan-2021 21:08 |
Last accessed | 22-Aug-2025 21:39 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Convert;
use Magento\Framework\Exception\LocalizedException;
/**
* Convert the array data to SimpleXMLElement object
*/
class ConvertArray
{
/**
* Transform an assoc array to \SimpleXMLElement object
* Array has some limitations. Appropriate exceptions will be thrown
*
* @param array $array
* @param string $rootName
* @return \SimpleXMLElement
* @throws LocalizedException
*/
public function assocToXml(array $array, $rootName = '_')
{
if (empty($rootName) || is_numeric($rootName)) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"The root element can't be empty or use numbers. Change the element and try again."
)
);
}
$xmlStr = <<<XML
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<$rootName></$rootName>
XML;
$xml = new \SimpleXMLElement($xmlStr);
foreach (array_keys($array) as $key) {
if (is_numeric($key)) {
throw new LocalizedException(
new \Magento\Framework\Phrase('An error occurred. Use non-numeric array root keys and try again.')
);
}
}
return self::_assocToXml($array, $rootName, $xml);
}
/**
* Convert nested array into flat array.
*
* @param array $data
* @return array
*/
public static function toFlatArray($data)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$value = self::toFlatArray($value);
unset($data[$key]);
$data = array_merge($data, $value);
}
}
return $data;
}
/**
* Function, that actually recursively transforms array to xml
*
* @param array $array
* @param string $rootName
* @param \SimpleXMLElement $xml
* @return \SimpleXMLElement
* @throws LocalizedException
*/
private function _assocToXml(array $array, $rootName, \SimpleXMLElement $xml)
{
$hasNumericKey = false;
$hasStringKey = false;
foreach ($array as $key => $value) {
if (!is_array($value)) {
if (is_string($key)) {
if ($key === $rootName) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"An associative key can't be the same as its parent associative key. "
. "Verify and try again."
)
);
}
$hasStringKey = true;
$xml->addChild($key, $value);
} elseif (is_int($key)) {
$hasNumericKey = true;
$xml->addChild($key, $value);
}
} else {
$xml->addChild($key);
self::_assocToXml($value, $key, $xml->{$key});
}
}
if ($hasNumericKey && $hasStringKey) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"Associative and numeric keys can't be mixed at one level. Verify and try again."
)
);
}
return $xml;
}
}
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Convert;
use Magento\Framework\Exception\LocalizedException;
/**
* Convert the array data to SimpleXMLElement object
*/
class ConvertArray
{
/**
* Transform an assoc array to \SimpleXMLElement object
* Array has some limitations. Appropriate exceptions will be thrown
*
* @param array $array
* @param string $rootName
* @return \SimpleXMLElement
* @throws LocalizedException
*/
public function assocToXml(array $array, $rootName = '_')
{
if (empty($rootName) || is_numeric($rootName)) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"The root element can't be empty or use numbers. Change the element and try again."
)
);
}
$xmlStr = <<<XML
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<$rootName></$rootName>
XML;
$xml = new \SimpleXMLElement($xmlStr);
foreach (array_keys($array) as $key) {
if (is_numeric($key)) {
throw new LocalizedException(
new \Magento\Framework\Phrase('An error occurred. Use non-numeric array root keys and try again.')
);
}
}
return self::_assocToXml($array, $rootName, $xml);
}
/**
* Convert nested array into flat array.
*
* @param array $data
* @return array
*/
public static function toFlatArray($data)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$value = self::toFlatArray($value);
unset($data[$key]);
$data = array_merge($data, $value);
}
}
return $data;
}
/**
* Function, that actually recursively transforms array to xml
*
* @param array $array
* @param string $rootName
* @param \SimpleXMLElement $xml
* @return \SimpleXMLElement
* @throws LocalizedException
*/
private function _assocToXml(array $array, $rootName, \SimpleXMLElement $xml)
{
$hasNumericKey = false;
$hasStringKey = false;
foreach ($array as $key => $value) {
if (!is_array($value)) {
if (is_string($key)) {
if ($key === $rootName) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"An associative key can't be the same as its parent associative key. "
. "Verify and try again."
)
);
}
$hasStringKey = true;
$xml->addChild($key, $value);
} elseif (is_int($key)) {
$hasNumericKey = true;
$xml->addChild($key, $value);
}
} else {
$xml->addChild($key);
self::_assocToXml($value, $key, $xml->{$key});
}
}
if ($hasNumericKey && $hasStringKey) {
throw new LocalizedException(
new \Magento\Framework\Phrase(
"Associative and numeric keys can't be mixed at one level. Verify and try again."
)
);
}
return $xml;
}
}