PHP将空数组转换为字符串

PHP将空数组转换为字符串,php,xml,arrays,Php,Xml,Arrays,我有一个将xml文件解析为数组的函数xml2array。 现在,当我的xml文件中有一个空值时,函数会将其转换为一个空数组 所以变成了[test]=>array(),但我希望它是一个空字符串“” 是否有人知道如何编辑下面的函数: <?php function xml2array($contents, $get_attributes = 1, $priority = 'tag') { $parser = xml_parser_create(''); xml_pars

我有一个将xml文件解析为数组的函数xml2array。 现在,当我的xml文件中有一个空值时,函数会将其转换为一个空数组

所以
变成了[test]=>array()
,但我希望它是一个空字符串“”

是否有人知道如何编辑下面的函数:

<?php
    function xml2array($contents, $get_attributes = 1, $priority = 'tag') {

    $parser = xml_parser_create('');
    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, trim($contents), $xml_values);
    xml_parser_free($parser);
    if (!$xml_values)
        return; //Hmm...
    $xml_array = array ();
    $parents = array ();
    $opened_tags = array ();
    $arr = array ();
    $current = & $xml_array;
    $repeated_tag_index = array (); 
    foreach ($xml_values as $data)
    {
        unset ($attributes, $value);
        extract($data);
        $result = array ();
        $attributes_data = array ();
        if (isset ($value))
        {
            if ($priority == 'tag')
                $result = $value;
            else
                $result['value'] = $value;
        }
        if (isset ($attributes) and $get_attributes)
        {
            foreach ($attributes as $attr => $val)
            {
                if($attr == 'xsi:type') continue;
                if($attr == 'xsi:nil') continue;

                if ($priority == 'tag')
                    $attributes_data[$attr] = $val;
                else
                    $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
            }
        }
        if ($type == "open")
        { 
            $parent[$level -1] = & $current;
            if (!is_array($current) or (!in_array($tag, array_keys($current))))
            {
                $current[$tag] = $result;
                if ($attributes_data)
                    $current[$tag . '_attr'] = $attributes_data;
                $repeated_tag_index[$tag . '_' . $level] = 1;
                $current = & $current[$tag];
            }
            else
            {
                if (isset ($current[$tag][0]))
                {
                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                    $repeated_tag_index[$tag . '_' . $level]++;
                }
                else
                { 
                    $current[$tag] = array (
                        $current[$tag],
                        $result
                    ); 
                    $repeated_tag_index[$tag . '_' . $level] = 2;
                    if (isset ($current[$tag . '_attr']))
                    {
                        $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                        unset ($current[$tag . '_attr']);
                    }
                }
                $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
                $current = & $current[$tag][$last_item_index];
            }
        }
        elseif ($type == "complete")
        {
            if (!isset ($current[$tag]))
            {
                $current[$tag] = $result;
                $repeated_tag_index[$tag . '_' . $level] = 1;
                if ($priority == 'tag' and $attributes_data)
                    $current[$tag . '_attr'] = $attributes_data;
            }
            else
            {
                if (isset ($current[$tag][0]) and is_array($current[$tag]))
                {
                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
                    if ($priority == 'tag' and $get_attributes and $attributes_data)
                    {
                        $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                    }
                    $repeated_tag_index[$tag . '_' . $level]++;
                }
                else
                {
                    $current[$tag] = array (
                        $current[$tag],
                        $result
                    ); 
                    $repeated_tag_index[$tag . '_' . $level] = 1;
                    if ($priority == 'tag' and $get_attributes)
                    {
                        if (isset ($current[$tag . '_attr']))
                        { 
                            $current[$tag]['0_attr'] = $current[$tag . '_attr'];
                            unset ($current[$tag . '_attr']);
                        }
                        if ($attributes_data)
                        {
                            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
                        }
                    }
                    $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
                }
            }
        }
        elseif ($type == 'close')
        {
            $current = & $parent[$level -1];
        }
    }

    return ($xml_array);
}
$val)
{
如果($attr=='xsi:type')继续;
如果($attr=='xsi:nil')继续;
如果($priority=='tag')
$attributes_data[$attr]=$val;
其他的
$result['attr'][$attr]=$val;//设置名为'attr'的数组中的所有属性
}
}
如果($type==“打开”)
{ 
$parent[$level-1]=&$current;
如果(!is_array($current)或(!in_array($tag,array_key($current)))
{
$current[$tag]=$result;
如果($attributes\u data)
$current[$tag.'\u attr']=$attributes\u data;
$repeated_tag_index[$tag.'...$level]=1;
$current=&$current[$tag];
}
其他的
{
如果(isset($current[$tag][0]))
{
$current[$tag][$repeated\u tag\u index[$tag.'...'.$level]]=$result;
$repeated_tag_index[$tag.'...$level]++;
}
其他的
{ 
$current[$tag]=数组(
$current[$tag],
$result
); 
$repeated_tag_index[$tag.'...$level]=2;
如果(isset($current[$tag.\u attr']))
{
$current[$tag]['0_attr']=$current[$tag.\u attr'];
未设置($current[$tag.\u attr']);
}
}
$last_item_index=$repeated_tag_index[$tag.'..'.$level]-1;
$current=&$current[$tag][$last_item_index];
}
}
elseif($type==“complete”)
{
如果(!isset($current[$tag]))
{
$current[$tag]=$result;
$repeated_tag_index[$tag.'...$level]=1;
如果($priority=='tag'和$attributes\u data)
$current[$tag.'\u attr']=$attributes\u data;
}
其他的
{
if(isset($current[$tag][0])和is_数组($current[$tag]))
{
$current[$tag][$repeated\u tag\u index[$tag.'...'.$level]]=$result;
if($priority=='tag'和$get\u attributes和$attributes\u data)
{
$current[$tag][$repeated\u tag\u index[$tag.'..'.$level].\u attr']=$attributes\u data;
}
$repeated_tag_index[$tag.'...$level]++;
}
其他的
{
$current[$tag]=数组(
$current[$tag],
$result
); 
$repeated_tag_index[$tag.'...$level]=1;
if($priority=='tag'和$get\u属性)
{
如果(isset($current[$tag.\u attr']))
{ 
$current[$tag]['0_attr']=$current[$tag.\u attr'];
未设置($current[$tag.\u attr']);
}
如果($attributes\u data)
{
$current[$tag][$repeated\u tag\u index[$tag.'..'.$level].\u attr']=$attributes\u data;
}
}
$repeated_tag_index[$tag.'..'.$level]++;//已采用0和1索引
}
}
}
elseif($type=='close')
{
$current=&$parent[$level-1];
}
}
返回($xml_数组);
}

?>

使用empty函数检查数组是否为空

返回空($xml\u数组)?“”:$xml\u数组



}?>

只需使用
empty
:检查源数组并返回
empty()
返回true。在函数开头添加以下内容:

if( empty($myArray) ) {
   return '';
}

您看到的空数组是您设置的默认值:

$result = array ();
您有以下选择:

  • 保持原样-空元素将有一个空数组作为值
  • 设置为
    (空字符串)-空元素将有一个空字符串作为值
  • 设置为
    NULL
    -如果空元素具有具有相同元素名称的同级元素,则将删除它们。将保留单个空元素

  • 根据您的需要,只需选择默认值。

    我首先认为array\u walk\u recursive是一个不错的选择,但它忽略了函数调用中的空数组

    我会创建一个函数,类似这样的东西。它递归地遍历数组,并用字符串替换数组。(类似这样的)

    然后在返回数组之前,从现有函数xml2array()的末尾调用它

        elseif ($type == 'close')
            {
            $current = & $parent[$level -1];
            }
        }
    
        $xml_array = replaceArrayToString($xml_array);
        return ($xml_array);
    }
    
    空($value)?“”:$价值观是否会突然出现在脑海中
    
    function replaceArrayToString($arr = array()) {
        $newArr = array();
        foreach($arr as $key=>$value)
        {
            if (is_array($value))
            {
               unset($arr[$key]);
    
                //Is it an empty array, make it a string
                if (empty($value)) {
                    $newArr[$key] = '';
                }
                else {
                    $newArr[$key] = replaceArrayToString($value);
                }
    
            }
            else {
                $newArr[$key] = $value; 
            }
    
        }
        return $newArr;
    
    }
    
        elseif ($type == 'close')
            {
            $current = & $parent[$level -1];
            }
        }
    
        $xml_array = replaceArrayToString($xml_array);
        return ($xml_array);
    }