for循环 - 在多维数组中更深入地移动数字键

时间:2014-10-15 11:03:54

标签: php arrays multidimensional-array foreach nested

我设法用我自己的语言解析数组。 (为此:称为lance项目语言 - lpl)

所以.. \ lance(说(你好)) 将格式化为

Array
(
    [0] => lpl_struct
        (
            [args] => Array
                (
                    [0] => Array
                        (
                            [0] => lpl_struct
                                (
                                    [args] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [0] => lpl_struct
                                                        (
                                                            [args] => Array
                                                                (
                                                                    [0] => hello
                                                                )
                                                            [funcname] => text
                                                        )
                                                )
                                        )
                                    [funcname] => says
                                )
                        )
                )
            [funcname] => lance
        )
)

我现在正试图创建一个xml结构,这是我尝试这样做的:

    function arr2xml($array) {
    $xml = '';

    if (is_array($array) || is_object($array)) {
        foreach ($array as $key => $value) {
            if (is_numeric($key)) {
                #move deeper in array to get the right NON-NUMERIC key
            }

            $xml .= '<' . $key . '>' . "\n" . $this->arr2xml($value) . '</' . $key . '>' . "\n";
        }
    } else {
        $xml = htmlspecialchars($array, ENT_QUOTES) . "\n";
    }

    return $xml;
}
到目前为止,我得到的是:

<0>
    <args>
        <0>
            <0>
                <args>
                    <0>
                        <0>
                            <args>
                                <0>
                                hello
                                </0>
                            </args>
                            <funcname>
                            text
                            </funcname>
                        </0>
                    </0>
                </args>
                <funcname>
                says
                </funcname>
            </0>
        </0>
    </args>
    <funcname>
    lance
    </funcname>
</0>

是否可以“跳过”数组中的数字键?说...更深入到下一个“真正的”数组键?

我们应该重新考虑我创建的数组

感谢您的回答。

sry格式错误。我有点新的stackoverflow。 喷枪

1 个答案:

答案 0 :(得分:0)

我尝试使用以下方法重建您的阵列:

$arr = array();
$arr[] = array(
    'args'=>array(
        array(
            'args'=>array(
                array(
                    'args'=>array(
                        'hello',
                    ),
                    'funcname'=>'text',
                ),
            ),
            'funcname'=>'says',
        ),
    ),
    'funcname'=>'lance',
);

然后我更新了你的arr2xml函数:

function arr2xml($array) {
    $xml = '';

    if (is_array($array) || is_object($array)) {
        foreach ($array as $key => $value) {
            if (is_numeric($key)) {
                // Skip a numeric key and recurse.
                $xml .= arr2xml($value);
            }
            else {
                $xml .= '<' . $key . '>' . "\n" . arr2xml($value) . '</' . $key . '>' . "\n";
            }
        }
    } else {
        $xml = htmlspecialchars($array, ENT_QUOTES) . "\n";
    }

    return $xml;
}

这产生了以下内容,这与您正在寻找的内容非常接近:

<args>
    <args>
        <args>
            hello
        </args>
        <funcname>
            text
        </funcname>
    </args>
    <funcname>
        says
    </funcname>
</args>
<funcname>
    lance
</funcname>

唯一缺少的是根元素。您可以使用以下方法手动添加:

'<xml>' . arr2xml($arr) . '</xml>'

希望这有帮助!