2014-02-26 56 views
0

我想寫一個類,將過濾數組並返回結果。基本上我有一個大的multidimensioanl陣列$companyArray,其中包含每個公司的數組,其中包含「公司名稱,地址,城市,州,電話等」。我需要對每個公司的子數組進行排序,並查看是否有任何字段爲空,如果字段爲空,則返回一個數組,該數組包含該公司所有空白的數組,並將它們添加到另一個數組中,然後調用該方法我知道哪些公司包含空白值。這將擴展到檢查其他領域的「逗號,新線等」。從方法返回數組,並添加到現有的數組

這是到目前爲止我的代碼:

這是我Test類裏面的方法,我通過所有的值到Filter類,並在那裏我想返回的字段被放置在$badArray

public function CleanData($companyArray) { 

     $filtered = new Filter; 
     $badArray = array(); 
     foreach($companyArray as $row => $value) { 

      if($filtered->Blank($value)) { 
       $badArray[$value['Company_Name']] = $filtered->Blank(); 
      } else { 

      } 



     } 
     echo "<PRE>"; 
     print_r($badArray); 
     echo "</PRE>"; 
      //$this->SortGoodFromBad($badArray, $companyArray); 

    } 

這是我Filter類裏面的方法:

public function Blank($value) { 
    $blank = array(); 
    foreach($value as $row => $content) { 
     if(trim($value[$row] == "")){ 
      $blank[$value['Company_Name']][] = " Contains Blank " . $row; 
     } else { 
      return FALSE; 
     } 
    } 

    return $blank; 
} 

這是對$companyArray

array(

    [0] = array(

      'Company_Name' = "My Company" 
      'Address' = "2101 Big Walk way" 
      'Phone' = "555-555-5555" 
      'Website' = "" 
      ) 

    [1] = array(

     'Company_Name' = "My Other Company" 
     'Address' = "" 
     'Phone' = "" 
     'Website' = "http://mylittlecompany.com" 
     ) 

    [2] = array(

     'Company_Name' = "My Super Company" 
     'Address' = "2101 Other Walk Way" 
     'Phone' = "555-555-5555" 
     'Website' = "http://example.com" 

    ) 

) 

一個例子,我想$badArray到底是這個樣子

array(

    ["My Company"] = array(
     [0] = 'Contains blank Website' 
     ) 

    ["My Other Company"] = array(
     [0] = 'Contains blank Address' 
     [1] = 'Contains blank Phone' 
     ) 
) 

注意My Super Company沒有出現上面的數組中,因爲它包含在一個領域所有地方。有人能幫我解決這個問題嗎?如果我轉儲$blank陣列,我已將其設置爲針對該特定公司。我需要返回該回來了,它添加到$badArray

+0

我發佈了一個解決方案,似乎做你想做的。如果它不符合法案,請讓我知道,我會修改它。 – DragonYen

回答

1

這個工作對我來說:

function CleanData($companyArray) { 
    $filtered = new Filter; 
    $badArray = array(); 
    foreach($companyArray as $row => $value) { 
     $aFilter = $filtered->Blank($value); 
      if ($aFilter !== false) { 
       $badArray[$value['Company_Name']] = $aFilter; 
      } 
    } 
    echo "<PRE>"; 
    print_r($badArray); 
    echo "</PRE>"; 
} 

空白(從過濾器類)

class Filter 
{ 
    public function Blank($value) { 
     $blank = array(); 
     foreach($value as $row => $content) { 
      if(trim($content) == "") { 
       $blank[] = " Contains Blank " . $row; 
      } 
     } 

     if (count($blank) == 0) 
     { 
      return false; 
     } 

     return $blank; 
    } 
} 

與原來的代碼有幾個問題:

else { 
    return FALSE; 
} 

這會立即返回FALSE第一個非空白的項目。因此,除非記錄是100%空白,否則它將永遠不會被添加到數組中。

if(trim($value[$row] == "")){ 

trim函數封裝得太多(==「」)。此外,我已將其更改爲$ content,因爲此時可用。當它已經爲你分裂時沒有任何理由對陣列產生疑惑。

如果您對我的其他更改有任何疑問,請告訴我。