php özyineleme global değişken?

1 Cevap php

Ben global bir değişken ile bir nesne / dizi ayrıştırır bir özyineleme işlevi var. Ben genel değişkeni açıklama eğer ben bir şey ama ben onu bırakırsanız onun içinde kendi sonuç kümesi olmalıdır dizi diğer değerler ekleyerek tutar. Ben burada bir şey değiştirmek gerekir mi?

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

GİRİŞ:

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
)

DÖNÜŞ:

Array
(
    [0] => a0E50000002jxYkEAI
)

WANTED DÖNÜŞ:

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

1 Cevap

Bir global değişken gerekli midir? Aksi takdirde bu şekilde basitleştirmek olabilir:

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

Sonra bunu:

$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.