Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php递归全局变量?_Php_Recursion - Fatal编程技术网

php递归全局变量?

php递归全局变量?,php,recursion,Php,Recursion,我有一个递归函数,它用一个全局变量解析一个对象/数组。如果我注释掉全局变量,我什么也得不到,但是如果我把它留在数组中,它会不断地向数组中添加其他应该在它自己的结果集中的值。我需要在这里换些东西吗 更新#2: 我想我是在将所有唯一值推送到数组中,如何获得我想要的回报 function getResp($objectPassed) { foreach($objectPassed as $element) { if(is_object($element)) {

我有一个递归函数,它用一个全局变量解析一个对象/数组。如果我注释掉全局变量,我什么也得不到,但是如果我把它留在数组中,它会不断地向数组中添加其他应该在它自己的结果集中的值。我需要在这里换些东西吗

更新#2: 我想我是在将所有唯一值推送到数组中,如何获得我想要的回报

function getResp($objectPassed) {

    foreach($objectPassed as $element) {
        if(is_object($element)) {
            // recursive call
            $in_arr = getResp($element);
        }elseif(is_array($element)) {
            $in_arr = getResp($element);
        } else {
            // XML is being passed, need to strip it
            $element = strip_tags($element); 

            // Trim whitespace
            $element = trim($element);

            // Push to array
            if($element != '') {
                if (!preg_match("/^[0-9]$/", $element)) {
                    if (!in_array($element,$in_arr)) {
                        $in_arr[] = $element;
                    }
                }
            } 
        }
    }
    return $in_arr;
}
输入:

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [records] => Array
        (
            [0] => stdClass Object
                (
                    [type] => typeName
                    [Id] => Array
                        (
                            [0] => a0E50000002jxhmEAA
                            [1] => a0E50000002jxhmEAA
                        )

                )

            [1] => stdClass Object
                (
                    [type] => typeName
                    [Id] => Array
                        (
                            [0] => a0E50000002jxYkEAI
                            [1] => a0E50000002jxYkEAI
                        )

                )

        )

    [size] => 2
)
返回:

Array
(
    [0] => a0E50000002jxYkEAI
)
通缉令:

Array
(
    [0] => a0E50000002jxYkEAI
    [1] => a0E50000002jxhmEAA
)

是否需要全局变量?否则,您可以通过以下方式进行简化:

function getResp($objectPassed, &$in_arr = array()) {  // <-- note the reference '&'

    foreach($objectPassed as $element) {
        if(is_object($element) || is_array($element)) { // <-- else if statement simplified
            getResp($element,$in_arr);
        } else {
            // XML is being passed, need to strip it
            $element = strip_tags($element); 

            // Trim whitespace
            $element = trim($element);

            // Push to array  
            if($element != ''  &&                      // <-- everything in one test
              !preg_match("/^[0-9]$/", $element) &&
              !in_array($element,$in_arr)) 
            {                    
                  $in_arr[] = $element;  
            } 
        }
    }
    return $in_arr;
}
如果递归函数必须一次又一次地访问同一资源(在本例中是初始数组),我会一直这样做。

我不知道是否可以测量,但我想这比复制值要有效得多。

是否应该存储递归调用的返回值?同样:$in_arr=getResp($element);Thnx@Sebastian我做了改变,但仍然没有得到我想要的结果哦,是的,我想我现在看到了。尝试$in_arr[]=getResp($element);:-)我想这就是我所需要的,现在就测试出来,谢谢这帮了我很多忙,也给了我一些关于如何进行递归的见解
$result = getResp($data);