2014-02-26 54 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,因为此时可用。当它已经为你分裂时没有任何理由对阵列产生疑惑。

如果您对我的其他更改有任何疑问,请告诉我。