tags:

views:

502

answers:

1

I have a recursion function that parses an object/array with a global variable. If I comment out the global variable I get nothing but if I leave it in it keeps adding to the array other values that should be in it own result set. Do I need to change something here?

UPDATE #2: How can I get the return I want, I thought I was pushing all unique values to the array?

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;
}

INPUT:

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
)

RETURN:

Array
(
    [0] => a0E50000002jxYkEAI
)

WANTED RETURN:

Array
(
    [0] => a0E50000002jxYkEAI
    [1] => a0E50000002jxhmEAA
)
+3  A: 

Is a global variable necessary? Otherwise you could simplify it this way:

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;
}

Then you do:

$result = getResp($data);

If a recursive function has to access the same resource over and over again (in this case the initial array), I would always pass this as a reference.
I don't know if is measurable but I would guess that this is much more efficient than copying values.

Felix Kling
I think this is what I need, testing it out now
Phill Pafford
Thanks this helped out a ton and also gave me some insight on how to do recursion
Phill Pafford