解析XML文件,跳过一个标记

问题描述:

我想加载一个xml文件并解析它。我有一个配置文件,我在其中定义了我感兴趣的名称的数组,因此在加载文件后,我将标记与预定义数组进行比较,如果值匹配,则使用标记(名称)作为数组的索引并保存其值。问题在于它总是跳过配置数组中第一个名称的标签。此外,LoadCsvReport应该工作,除了几个错误检查是好代码?我正在学习OOP,但我认为我没有使用它。解析XML文件,跳过一个标记

class LoadAdReport extends CI_Controller 

{ 

/* 
* @return array[][] 
* */ 
public function LoadCsvReport() 
{ 
    require "config.php"; 
    $key = array(); 
    $values = array(); 
    $flag = false; 


    $csvfile = fopen(dirname(__FILE__) . "/result.csv", "r"); 

    while ($file = fgetcsv($csvfile)) { 
     if (!$flag) { 
      /*Loop through config array which contains names of columns of our interest 
       If row from file contains name from config, then that name will have assigned 
       index of that column 
      */ 
      foreach ($bing as $name) 
       if ($value = array_search($name, $file)) { 
        $key[$name] = $value; 
        $flag = true; 
       } 
      //After column indexes are assigned to names skip current row 
      if ($flag) 
       continue; 
     } 


     if ($flag) { 

      foreach ($key as $columnName => $index) { 
       /*Get columnname and index, items from $file[$index] are assign to array 
        corresponding array with columnName as index 
       */ 
       if ($file[$index] === "-") 
        break; 
       $values[$columnName][] = $file[$index]; 
       //$key[$index] = array($item => $file[$item]); 

      } 
     } 
    } 
    foreach ($values as $key => $val) 
     foreach ($val as $lol => $item) 
      echo $key . "=>" . $item . "<br/>"; 

    fclose($csvfile); 
} 

public function LoadXmlReport() 
{ 
    require "config.php"; 


    $items = array(); 
    $xmlfile = simplexml_load_file(dirname(__FILE__) . "/xmlfile.xml"); 
    foreach ($xmlfile as $key => $value) 
     foreach ($value as $key => $item) { 
      if ($item == "-") { 
       break; 
      } elseif (array_search($key, $bing)) 
       $items[$key][] = $item; 
     } 


    foreach ($items as $key => $val) 
     foreach ($val as $lol => $item) 
      echo $key . "=>" . $item . "<br/>"; 


} 
} 

这是我的XML文件

<root> 
<row> 
    <Status>Enabled</Status> 
    <Keyword>Toaletna voda</Keyword> 
    <Campaign>Lešenari</Campaign> 
    <Adgroup>Lešenaris</Adgroup> 
    <BidStrategyType>InheritFromParent</BidStrategyType> 
    <Bid>0.05</Bid> 
    <Matchtype>Broad</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
    <row> 
    <Status>Enabled</Status> 
    <Keyword>lyžička</Keyword> 
    <Campaign>Lešenari</Campaign> 
    <Adgroup>Lešenaris</Adgroup> 
    <BidStrategyType>InheritFromParent</BidStrategyType> 
    <Bid>0.05</Bid> 
    <Matchtype>Broad</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
    <row> 
    <Status>Search total</Status> 
    <Keyword>-</Keyword> 
    <Campaign>-</Campaign> 
    <Adgroup>-</Adgroup> 
    <BidStrategyType>-</BidStrategyType> 
    <Bid>-</Bid> 
    <Matchtype>-</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
    <row> 
    <Status>Content total</Status> 
    <Keyword>-</Keyword> 
    <Campaign>-</Campaign> 
    <Adgroup>-</Adgroup> 
    <BidStrategyType>-</BidStrategyType> 
    <Bid>-</Bid> 
    <Matchtype>-</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
    <row> 
    <Status>Deleted items total</Status> 
    <Keyword>-</Keyword> 
    <Campaign>-</Campaign> 
    <Adgroup>-</Adgroup> 
    <BidStrategyType>-</BidStrategyType> 
    <Bid>-</Bid> 
    <Matchtype>-</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
    <row> 
    <Status>Overall total</Status> 
    <Keyword>-</Keyword> 
    <Campaign>-</Campaign> 
    <Adgroup>-</Adgroup> 
    <BidStrategyType>-</BidStrategyType> 
    <Bid>-</Bid> 
    <Matchtype>-</Matchtype> 
    <Clicks>0</Clicks> 
    <Impr.>0</Impr.> 
    <Conv.>0</Conv.> 
    </row> 
</root> 

,这是我的配置文件

$bing = array(
"Adgroup", 
"Campaign", 
"Keyword", 
"Clicks", 
"Impr.", 
"Conv.", 
"Bid", 
); 

的问题是在这里:

elseif (array_search($key, $bing)) 

arrach_search返回数组功能索引在哪里p当时的价值被发现。对于阵列中的第一项,即0。但是if(0)等于if(false)

你需要返回值0区分了“我已经找到了该项目的数组中的第0位置”和‘我还没有发现在阵列中所有项目’的返回值false

正确:

elseif (array_search($key, $bing) !== FALSE) 
+0

是啊,这解决了这个问题,感谢您的帮助:) – rtom