用于删除'<'的递归函数和'>'来自数组键

时间:2018-01-22 11:06:56

标签: php arrays recursion

我正在尝试从一个关联数组中获取一个xml文件,其数组键被封装到'<'和'>'

我尝试使用递归函数,但它只在第一级正常工作:

请记住,我的最终目标是创建一个xml,欢迎任何适当的建议

这是我到目前为止所做的:

$arr = 
array('<Lev0_0>' => 0, 
      '<Lev0_1>' => 1, 
      '<Lev0_2>' => array (
          '<Lev1_0>' => 2,
          '<Lev1_1>' => 3
          )
);

print_r(RepairKeysMultidimensional($arr));

    function RepairKeysMultidimensional(array $array){
        $Keys = array();
        foreach($array as $Key => $Value){
            $NewKey = str_replace(array('<','>'),'',$Key);
            $array[$NewKey] = $Value;
            unset($array[$Key]);
            if(is_array($Value)){
                RepairKeysMultidimensional($Value);
            }
        }
        return $array;
    }

输出是:

Array (
[Lev0_0] => 0 
[Lev0_1] => 1 
[Lev0_2] => Array (
    [] => 2 
    [] => 3 
    )
) 

3 个答案:

答案 0 :(得分:3)

如果这是结构,并且您永远不会期望><?php $arr = array( '<Lev0_0>' => 0, '<Lev0_1>' => 1, '<Lev0_2>' => array ( '<Lev1_0>' => 2, '<Lev1_1>' => 3 ) ); $arr = json_decode(str_replace(array('<','>'), '', json_encode($arr)), true); print_r($arr); 作为值的一部分,那么您不需要在json_encode上循环它,删除字符,然后json_decode将其删回数组。

Array
(
    [Lev0_0] => 0
    [Lev0_1] => 1
    [Lev0_2] => Array
        (
            [Lev1_0] => 2
            [Lev1_1] => 3
        )

)

https://3v4l.org/2d7Hq

<强>结果:

a

答案 1 :(得分:1)

尝试在if语句中添加做法:

function RepairKeysMultidimensional(array $array){
    $Keys = array();
    foreach($array as $Key => $Value){
        $NewKey = str_replace(array('<','>'),'',$Key);
        $array[$NewKey] = $Value;
        unset($array[$Key]);
        if (is_array($Value)) {
            $array[$NewKey] = RepairKeysMultidimensional($Value);
        }
    }
    return $array;
}

答案 2 :(得分:1)

你没有影响第二次调用外部数组的结果!

试试这个:

<?php
$arr = 
array('<Lev0_0>' => 0, 
  '<Lev0_1>' => 1, 
  '<Lev0_2>' => array (
      '<Lev1_0>' => 2,
      '<Lev1_1>' => 3
      )
);
echo str_replace(array('<','>'),'','<Lev0>');
echo '<br/><br/>';
print_r(RepairKeysMultidimensional($arr));

function RepairKeysMultidimensional(array $array){
    $Keys = array();
    foreach($array as $Key => $Value){
        $NewKey = str_replace(array('<','>'),'',$Key);

        unset($array[$Key]);
        if(is_array($Value)){
            $array[$NewKey] = RepairKeysMultidimensional($Value);
        }else{
            $array[$NewKey] = $Value;
        }
    }
    return $array;
}

这个输出是:

Array ( 
    [Lev0_0] => 0 
    [Lev0_1] => 1 
    [Lev0_2] => Array ( 
             [Lev1_0] => 2 
             [Lev1_1] => 3 ) )