【问题标题】:Recursive PHP function that copies multidimensional array but replaces empty values复制多维数组但替换空值的递归 PHP 函数
【发布时间】:2011-01-28 12:18:12
【问题描述】:

我有一个可以是任意大小或深度的多维数组。我基本上是在尝试用一个值替换空值,但仅在某些情况下。这是数组的一个例子,它很大,但我想很好地说明我的观点:

[field_ter] => 
[field_title] => Array
    (
        [0] => Array
            (
                [value] => 
            )

    )

[field_firstnames] => Array
    (
        [0] => Array
            (
                [value] => test9
            )

    )

[field_birth] => Array
    (
        [0] => Array
            (
                [value] => 
            )

    )

[field_postal] => Array
    (
        [0] => Array
            (
                [value] => 
            )

    )

[group_certificates] => Array
    (
        [0] => Array
            (
                [_delta] => 0
                [field_cert_details] => Array
                    (
                        [value] => 
                    )

                [field_cert_issuedate] => Array
                    (
                        [value] => Array
                            (
                                [date] => 
                            )

                    )

                [field_cert_expiry] => Array
                    (
                        [value] => Array
                            (
                                [date] => 
                            )

                    )

                [field_cert_issue_country] => Array
                    (
                        [value] => 
                    )

                [field_cert_limits] => Array
                    (
                        [value] => 
                    )

            )

        [1] => Array
            (
                [_delta] => 1
                [field_cert_details] => Array
                    (
                        [value] => 
                    )

                [field_cert_issuedate] => Array
                    (
                        [value] => Array
                            (
                                [date] => 
                            )

                    )

                [field_cert_expiry] => Array
                    (
                        [value] => Array
                            (
                                [date] => 
                            )

                    )

                [field_cert_issue_country] => Array
                    (
                        [value] => 
                    )

                [field_cert_limits] => Array
                    (
                        [value] => 
                    )

            )

    )

我要做的是在数组中找到任何为空的元素,然后将空值替换为一个值。我有一个空元素未被替换的异常数组。这是我目前正在开发的功能:

function check_empty(&$array) { 
    $exceptions = array('changed', 'form_build_id','date', 'status', 'op');
    // This is the array we will return at the end of the function
    $new_array = array();
    foreach($array as $key => $value) {
        if(is_array($value)) {
            check_empty($value);
        }
        elseif ($value == '' && !in_array($key, $exceptions)) {
            $new_array[$key] = '$$$';
        }
        else {
            $new_array[$key] = $value;
        }
    }
    return $new_array;
}

有人可以帮助我调整我的功能或为我指明更好的方向吗?我试过 array_walk_recursive 但它不适用于我的数组。

【问题讨论】:

  • 请参阅stackoverflow.com/editing-help 获取有关如何格式化您的问题的帮助。在这里,我们使用一种叫做 Markdown 的东西来代替通常的 HTML。文本区域上方有一些工具栏图标可以帮助您进行格式化。欢迎来到本站!

标签: php arrays multidimensional-array


【解决方案1】:

需要赋值递归check_empty的返回值:

function check_empty($array) { 
    $exceptions = array('changed', 'form_build_id','date', 'status', 'op');
    // This is the array we will return at the end of the function
    $new_array = array();

    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $new_array[$key] = check_empty($value);
        }
        elseif ($value == '' && !in_array($key, $exceptions)) {
            $new_array[$key] = '$$$';
        }
        else {
            $new_array[$key] = $value;
        }
    }
    return $new_array;
}

【讨论】:

  • 太完美了,非常感谢。有点业余的错误!
【解决方案2】:
if(is_array($value)) {
  check_empty($value);
}

在这里,您不会将结果值返回到任何地方。应该是这个问题

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2016-09-26
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多