2012-01-09 39 views
1

在回調函數值爲false我有一個這樣的數組:得到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'值。我怎樣才能做到這一點。

請任何機構幫我...

回答

1

這是因爲 '0' 的計算結果爲布爾值false。只要檢查未定義的,如果它是未定義返回false,true,如果它不是:

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

您還可以創建一個回調函數重用喜歡你原來的例子,這有助於減少對重複的代碼。該自定義回調函數也修剪的空間,並允許您指定值的數組,你不希望過濾掉:

// 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');