繁体   English   中英

在array_filter的回调函数中获取错误的值

[英]get false value in callback function in array_filter

我有一个像这样的数组:

Array ( [PlasticContainmentTrained] => 0 [AvoidDustSpreadTrained] => 1 [PostRenCleaningTrained] => 0 [EntranceWarningSign] => 1 [IntObjectCovered] => 1 [IntHVAC] => 0 [IntWindowClosed] => 1 [ExtWindowClosed] => 0 [IntDoorClosed] => 1 [ExtDoorClosed] => 0 [DoorCovered] => 1 [IntFloorCovered] => 0 [ExtGroundCovered] => 1 [ExtVertContainment] => 0 [WasteContained] => 1 [AllChipsDebris] => 0 [WorkAreaSurface] => 0 [DustClearanceTesting] => 1 [WasteHandlingTrained] => 1 [MaintainContainmentTrained] => 0 [PostingWarningSignTrained] => 1 [DescriptionOfRenovation] => bnfdbndljnbljdfnbljkdnfljn [TrainedWorkers] => jvndfjnvdfvjndfljvndfljvn [DustSamplingTechnicanNames] => jvnfjdfnlvjdfjvndfljndflj [QualificationCopies] => dfjvdjf [KitUsed] => vjnjkdsfnvljdnvdjfvndfjbnjgbnndfn [TestLocations] => jdfjnvljndfvjdnfvjdnfvjkfnlj [CertifiedRenPerformed] => fdjndfljvndfljvndfjvndflk [ReportAttachPath] => undefined [IAccept] => undefined [ProjectId] => 1 ) 

我想过滤此数组,但只有“未定义”值而不是“ 0”。 我为此使用了array_filter()函数:

function filterValue($var)
        {

            if($var=='0')
            {
                return 0;
            }
            elseif($var!='undefined')
            {
                return $var;
            }
        }
        $this->data = array_filter($_POST, "filterValue");

但它也会过滤“ 0”值。 我怎样才能做到这一点。

请任何人帮助我...

这是因为“ 0”的计算结果为布尔值false。 只需检查未定义,如果未定义则返回false,否则返回true:

<?php
$data = array_filter( $data, function( $element ) {
  return $element !== 'undefined';
});

您还可以像创建原始示例一样创建一个可重复使用的回调函数,这有助于减少重复的代码。 这个自定义的回调函数还可以修剪空格,并允许您指定一个不想被过滤掉的值数组:

// Customized "array_filter" callback to preserve "0" in submitted values:
function empty_array_filter($val) {
    $val = trim($val);
    $allowed_vals = array('0'); // List of values to keep (e.g. these should not be treated as "false").
    return in_array($val, $allowed_vals, true) ? true : ( $val ? true : false );
}

然后将数组过滤器与自定义回调一起使用,如下所示:

// Use the custom callback instead of the default one:
$array_data = array_filter($array_data, 'empty_array_filter');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM