【问题标题】:PHP recursive function returning null arrayPHP递归函数返回空数组
【发布时间】:2021-08-14 18:50:07
【问题描述】:

我有一个巨大的数组,其中的键在大多数情况下也不是恒定的,但是有 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),我需要所有三个值

【问题讨论】:

  • 你不认为你应该在调用之前定义函数吗?还有,你为什么要在内部调用函数?
  • 它是一个递归函数。检查整个数组的元素,并检查其中是否存在某些值。这就是为什么我需要递归循环
  • $form 数组是示例,它不是实际数组,该数组太大,包含 2000 个元素
  • @AdisonMasih don't you think you should define the function before calling it ...PHP 中不需要

标签: php recursion


【解决方案1】:

如果我理解正确,您需要传递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
                )

        )

)

【讨论】:

  • 克里斯,非常感谢你,我需要学习参考是如何工作的。 :)
猜你喜欢
  • 2015-04-27
  • 2020-04-08
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2012-03-11
  • 2019-01-12
相关资源
最近更新 更多