入力でCSVを受け取るPHPアプリケーションがあります。最初の列には、カテゴリとサブカテゴリの両方が「|」で分割されています。これをOpenCartDBに入れる必要があります。このDBには、CategoryとSubcategoryの同じテーブルがあります(「parent_id」列は、Categoryのcategory_idを示します)。次のように、必要なすべてのフィールドを含むクラスを作成することを考えました。
class Categorie {
public $category_id;
public $parent_id;
public $image;
public $top;
public $column;
public $sort_order;
public $status;
public $date_modified;
public $date_added;
public $language_id;
public $name;
public $description;
public $meta_description;
public $meta_keywords;
}
次に、データを分析します。
$categorie = array();
while ( ( $riga_file = fgetcsv( $file, 100000, "\t" ) ) !== false )
{
$array_el = count( $riga_file );
for( $el_cur = 0; $el_cur < $array_el; $el_cur++ )
{
switch ( $el_cur )
{
case 0:
$colonne = explode( "|", $riga_file[$el_corr] );
$categoria = new Categorie();
$categoria->image = "";
$categoria->top = 1;
$categoria->column = 1;
// ... bla adding description data
if( $categorie[$colonne[0]] == NULL ) // (1)
{
$categoria->name = $colonne[0];
$categoria->category_id = $id_categoria;
$categoria->parent_id = 0;
$categorie[$colonne[0]] = $categoria;
$id_categoria++;
}
if( $colonne[1] != NULL ) // (2)
{
$categoria->name = $colonne[1];
if( $categorie[$colonne[1]] == NULL )
{
$categoria->category_id = $id_categoria;
$categoria->parent_id = $categorie[$colonne[0]]->category_id;
$categorie[$colonne[1]] = $categorie;
$id_categoria++;
}
}
break;
}
次のような一意のオブジェクトのコレクションで満たされた配列が必要です。
// OUT(3)
Category 1
Subcategory 1
Category 2
Subcategory 2...
(1)と(2)の中に$ category($ categoryではない)のエコーを入れると、OUT(3)に書き留めた内容が正確にわかり、「エンジン」が正しいと思います。配列を検索しようとすると、問題が発生します。
echo "<table border='1'>";
foreach( $categorie as $value )
{
echo "<tr>
<td>$value->category_id</td>
<td>$value->parent_id</td>
<td>$value->name</td>
</tr>";
}
echo "</table>";
カテゴリをまったく取得しておらず、すべてではありませんがほとんどのサブカテゴリを取得しているためです。私は「検索エンジン」で何か間違ったことをしているのでしょうか、それともPHP配列で何かを誤解しているのでしょうか(おそらく私はC ++から来ており、このphpが私の頭を悩ませているからです)。