微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP递归函数返回空数组

如何解决PHP递归函数返回空数组

我有一个巨大的数组,其中的键在大多数情况下也不是恒定的,但是有 3 个键始终保持不变 (#name,#default_value,#value) 和 #default_value 和 #value 是不同的我想要在 1 个简单数组中获取这些类型的子数组,为此我在整个数组中使用递归并检查是否存在这 3 个键,我可以轻松地在递归中打印这些值,但我无法获得这些值作为回报.以便我可以进一步处理它们。

$form=array();
$form['field_one']['#name']="field_one";
$form['field_one']['#default_value']="old";
$form['field_one']['#value']="new";
$form['field_two']['#name']="field_two";
$form['field_two']['#default_value']="old";
$form['field_two']['#value']="new";
$form['field_three']['#name']="field_three";
$form['field_three']['#default_value']="old";
$form['field_three']['#value']="old";
$form['thisCouldbeanotherarray']['idk']['field_four']['#name']="field_four";
$form['thisCouldbeanotherarray']['idk']['field_four']['#default_value']="old";
$form['thisCouldbeanotherarray']['idk']['field_four']['#value']="new";
$arr_get = get_updatedvalues($form,array());
var_dump($arr_get);

function get_updatedvalues($form,$fields) {  
    if (!is_array($form)) {
        return;
    }

    foreach($form as $k => $value) { 
        if(str_replace('#','',$k) =='default_value' && ($form['#default_value'] != $form['#value'] ) ){               
            $fields['field'][$form['#name']] = array("name" => $form['#name'],"old_value" =>$form['#default_value'],"new_value" =>$form['#value']);              
            var_dump($fields);
        }
        get_updatedvalues($value,$fields);     
    }   
    return $fields;
}

如果您运行此代码,它将为您提供 $arr_get > array (size=0),我需要所有三个值

解决方法

如果我理解正确,您需要传递 fields 作为参考才能更改它:

function get_updatedvalues($form,&$fields) {

但是,要做到这一点,您需要更改初始调用,以便将变量作为引用传递:

$array = [];
$arr_get = get_updatedvalues($form,$array);

运行这个我得到:

Array
(
    [field] => Array
        (
            [field_one] => Array
                (
                    [name] => field_one
                    [old_value] => old
                    [new_value] => new
                )

            [field_two] => Array
                (
                    [name] => field_two
                    [old_value] => old
                    [new_value] => new
                )

            [field_four] => Array
                (
                    [name] => field_four
                    [old_value] => old
                    [new_value] => new
                )

        )

)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。