函数函数不返回数组

时间:2015-06-02 19:18:36

标签: php arrays

此函数应遍历多维数组并返回数组element_rule_id值的集合。 Hovewer它没有返回任何东西。

您可以在此处检查数组的var_dump:http://pastebin.com/T5nwGmna

function deepIns($array = array(), $collect = array(), $str = '') {
    $count = count($array);
    foreach($array as $i => $val) {
        if(is_array($val)) {
            if(array_key_exists('element_rule_id' ,$val)) {
                $collect[$val['element_rule_id']] = 1;
            }
            if(($count - 1) == $i) {
                if(array_key_exists('0', $val['condition'])) {
                    deepIns($val['condition'], $collect);
                }
                else {
                    return $collect;
                }
            }
        }
    }   
}

预期结果将是:

array (size=5)
  'rule_demo_rules1_1' => int 1
  'rule_demo_rules1_2' => int 1
  'rule_demo_rules1_3' => int 1
  'rule_demo_rules1_5' => int 1
  'rule_demo_rules1_6' => int 1

2 个答案:

答案 0 :(得分:0)

在设计递归函数时,返回是一种暧昧的方式,简单的解决方法是将函数放在静态类中,并将返回结果添加到该类中:

class xx {
public static $result;
function deepIns($array = array(), $collect = array(), $str = '') {
    $count = count($array);
    foreach($array as $i => $val) {
        if(is_array($val)) {
            if(array_key_exists('element_rule_id' ,$val)) {
                $collect[$val['element_rule_id']] = 1;
            }
            if(($count - 1) == $i) {
                if(array_key_exists('0', $val['condition'])) {
                    deepIns($val['condition'], $collect);
                }
                else {
                    self::$result[] = $collect;
                }
            }
        }
    }   
}

答案 1 :(得分:0)

所有需要的是deepIns($val['condition'], $collect);之前的$ collection

$collection = deepIns($val['condition'], $collect);