0

我有一个输入 CSV 的 PHP 应用程序;在第一列中,我将类别和子类别都用“|”分隔。我必须将这些东西放在 Open Cart DB 中,该数据库具有相同的类别和子类别表(“parent_id”列表示类别的 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...

如果我将 $categoria(不是 $categorie)的回声放在 (1) 和 (2) 中,我会准确地看到我在 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 让我大吃一惊)?

4

1 回答 1

0

我解决了问题,或者更好:问题。

1)我拼错了一个变量:在(2)中我写道:

$categorie[$colonne[1]] = $categorie;

正确的写法是:

$categorie[$colonne[1]] = $categoria;

2)更大的问题来自我对 PHP 的“不了解”,事实上,解决了问题 1,我得到了如下输出:

subcategory1
subcategory1
subcategory2
subcategory2

等等。这让我猜测当我这样做时:

$categorie[$colonne[1]] = $categoria;

PHP 不会复制里面的值,而是使用地址。遵循正确的代码:

switch ( $el_corr )
                    {
                        case 0:                                                 // Categorie e sottocategorie
                            $colonne = explode( "|", $riga_file[$el_corr] );
                            $categoria = new Categorie();
                            $categoria->image = "";
                            $categoria->top = 1;
                            $categoria->column = 1;
                            $categoria->sort_order = 0;
                            $categoria->status = 1;
                            // Category_Description Campi
                            $categoria->language_id = 1;
                            $categoria->name = $colonne[0];
                            $categoria->description = "";
                            $categoria->meta_description = "";
                            $categoria->meta_keywords = "";
                            ////////////////////////
                            if( $categorie[$colonne[0]] == NULL )
                            //if( !trova_categorie( $colonne[0], $categorie ) )
                            {
                                $categoria->name = $colonne[0];
                                $categoria->category_id = $id_categoria;
                                $categoria->parent_id = 0;
                                $categorie[$colonne[0]] = $categoria;
                                $id_categoria++;
                            }
                            $categoria = new Categorie();
                            $categoria->image = "";
                            $categoria->top = 1;
                            $categoria->column = 1;
                            $categoria->sort_order = 0;
                            $categoria->status = 1;
                            // Category_Description Campi
                            $categoria->language_id = 1;
                            $categoria->name = $colonne[0];
                            $categoria->description = "";
                            $categoria->meta_description = "";
                            $categoria->meta_keywords = "";
                            if( $colonne[1] != NULL )
                            {
                                $categoria->name = $colonne[1];
                                if( $categorie[$colonne[1]] == NULL )
                                //if( !trova_categorie( $colonne[1], $categorie ) )
                                {
                                    $categoria->category_id = $id_categoria;
                                    $categoria->parent_id = $categorie[$colonne[0]]->category_id;
                                    $categorie[$colonne[1]] = $categoria;
                                    $id_categoria++;
                                }
                            }
                            break;
                    } 
于 2012-12-04T13:02:43.347 回答