2016-12-28 6 views
2

を準備、私はこの配列の形式で以下の画像CSVファイルを変換する必要があります。クライアントが余分なカテゴリとサブカテゴリを追加する場合は、それに従って動作する必要があります。だから私は動的なものが必要です。CSV形式のカテゴリとサブカテゴリを読んで、PHPで多次元アレイ

enter image description here

Array形式:

Array 
(
    [0] => Cateory1 
    [Cateory1] => Array 
     (
      [0] => SubCategory11 
      [1] => SubCategory12 
      [2] => SubCategory13 
      [3] => SubCategory14 
     ) 

    [1] => Cateory2 
    [Cateory2] => Array 
     (
      [0] => SubCategory21 
      [1] => SubCategory22 
      [2] => SubCategory23 
       [SubCategory23] => Array 
       (
        [0] => SubCategory221 
        [1] => SubCategory222 
       ) 
      [3] => SubCategory24 
     ) 

    [2] => Cateory3 
    [Cateory3] => Array 
     (
      [0] => SubCategory31 
      [1] => SubCategory32 
      [2] => SubCategory33 
     ) 

    [3] => Cateory4 
    [Cateory4] => Array 
     (
      [0] => SubCategory41 
      [SubCategory41] => Array 
      (
       [0] => SubCategory411 
       [SubCategory411] => Array 
       (
        [0] => SubCategory4111 
        [SubCategory4111] => Array 
        (
         [0] => SubCategory41111 
        ) 
       ) 
      ) 
     ) 
) 

親切にこれを達成するために私を助けて。

ありがとうございました。

+0

あなたのcsvファイルに内容を入力してください。 –

+0

https://i.stack.imgur.com/BcIfW.pngサンプル形式のクライアント。 (この質問の添付されたcsvイメージ)。 –

+0

OCRを使用して値を検出しようとしているのは何ですか? –

答えて

1

私はPitchinnateに同意しますが、私は余裕があり、そのようなcsvのゴミを解析するのは嫌いですから、試してみると思いました。ここにあなたが行くかもしれないコードがあります。私は何かをテストしたり最適化したりしなかったので、これが期待どおりに動かなければ、正しい方向に向いているかもしれません。

// I assume, $imput is a twodimensional array containing the csv data 

// the multi dimensional result array 
$result = array(); 

// accumulated categories of current-1 line 
$lastCat = array(); 
foreach($input as $line) { 
    // accumulated categories of current line 
    $cat = array(); 



    //First we create an array in $cat that contains the full "breadcrumbs" per line e.g. 
    // ['category1', 'SubCategory11', 'SubCategory114', ...] 
    $marker = PHP_INT_MAX; 
    for ($i=0; $i<count($line); $i++) { 
     if ($marker < $i) { 
      $cat[$i] = ''; 
     } else if ($line[$i] != '') { 
      $cat[$i] = $line[$i]; 
      $marker = $i; 
     } 
    } 

    // then using these category breadcrumbs, we create the result arrays 
    // you could do this using recursion if you want 
    $tmp = $result; 
    for ($i=0; $i<count($cat); $i++) { 
     // if we haven't seen this category yet, create it 
     // a bit bulky, but necessary as you want the categories with numeric indices as well 
     if (!isset($lastCat[$i]) || $cat[$i] != $lastCat[]) { 
      $tmp[] = $cat[$i]; 
      // Check if there are still subcategories left in this line... 
      if (!empty($cat[$i+1])) { 
       //... and if so, create the category named index if not already existing 
       if (!array_key_exists($cat[$i], $tmp)) { 
        $tmp[$cat[$i]] = array(); 
       } 
       $tmp = $tmp[$cat[$i]]; 
      } else { 
       // ... and if not, we are finished with this line 
       break; 
      } 
     } 
    } 
    $lastCat = $cat; 
}