2016-11-14 8 views
1

XMLファイルを読み込み、解析しようとしています。私は私が関心のある名前で配列を定義した設定ファイルを持っているので、ファイルをロードした後、私の定義済みの配列とタグを比較し、値が一致すれば配列のインデックスとしてタグ(名前) 。問題は、常にconfig配列内の最初の名前のタグをスキップしていることです。また、いくつかのエラーチェックが良いコードであることを除いて、LoadCsvReportは動作するはずですか?私はOOPを学んでいますが、私はそれを使わないと思います。XMLファイルを解析すると、1つのタグがスキップされる

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/>"; 


} 
} 

これは

<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> 

私のXMLファイルであり、これは私の設定ファイルである

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

答えて

1

問題はここにある:

elseif (array_search($key, $bing)) 

配列を返すarrach_search機能インデックスp値が見つかった。配列の最初の項目は、0です。しかし、if(0)if(false)に等しい。

"配列の0番目の位置にアイテムが見つかりました"と返される値が0で、 "アレイのアイテムが見つからない"という戻り値falseを区別する必要があります。

正しい:問題を解決し

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

うん、助けてくれてありがとう:) – rtom

関連する問題