0

以下のスクリプトに示すように、PHP MySQLフェッチwhileループがあります。

$result2211 = mysql_query("select * from products where is_config = 'yes' ");
while($row2211 = mysql_fetch_assoc($result2211))
{
   $sn = $row2211['sn'];
   $allparrentselectq = mysql_query("SELECT * FROM parrentpro where parrentsn = $sn");
   while($allparrentselect = mysql_fetch_assoc($allparrentselectq))
   {
       $childarr = unserialize($allparrentselect['childsn']);
       $subpro  = '{"catname":"'.$allparrentselect['childname'].'",';
       $i = 0;
       foreach($childarr as $childarr):
           $subpro .= '"Pro'.$i++.'":"'.$childarr.'",';
       endforeach;
       $subpro1[] = substr($subpro, 0, -1)."}";
       $subproa = "[".implode(",",$subpro1)."]";
   }
   $prodObj2 = new ProductDetails();
   $prodObj2->productname = $row2211['productname'];
   $prodObj2->price = $row2211['productprice'];
   $prodObj2->discount = $row2211['discount'];
   $prodObj2->discountprice = $row2211['discountprice'];
   $prodObj2->imageURL = $row2211['productimageurl'];
   $prodObj2->category = $row2211['productcat'];
   $prodObj2->configurablepone = $subproa;
   $prodObj2->configurable = 'yes';
   array_push($totArr, $prodObj2);
}

その点で私は問題を抱えています。以下のような結果が得られます(JSON):

[
    {
        "productname":"Veg.Pizaa",
        "price":"350",
        "discount":"",
        "discountprice":"350",
        "imageURL":"http:\/\/farm8.staticflickr.com\/7154\/6694188161_9ee692d854_s.jpg",
        "category":"Pizaa",
        "configurablepone":[{"catname":"Extra","Pro0":"Extra 25g Cheese","Pro1":"Extra 75g Cheese"},"catname":"Nuts","Pro0":"Almonds","Pro1":"Peanuts","Pro2":"Pistachios"}],
        "configurable":"yes"
    },
    {
        "productname":"Core i7 Pc",
        "price":"48000",
        "discount":"2",
        "discountprice":"47040",
        "imageURL":"http:\/\/www.4to40.com\/images\/science\/Basic_Computer_Parts\/Computer.jpg",
        "category":"Pc",
        "configurablepone":[{"catname":"Extra","Pro0":"Extra 25g Cheese","Pro1":"Extra 75g Cheese"},{"catname":"Nuts","Pro0":"Almonds","Pro1":"Peanuts","Pro2":"Pistachios"},{"catname":"Harddisk","Pro0":"Segate 500Gb","Pro1":"Samsung 250Gb"},{"catname":"Ram","Pro0":"8Gb Ram","Pro1":"4Gb Ram","Pro2":"2Gb Ram"}],
        "configurable":"yes"
    }
]

しかし、私は以下のような結果が必要です:

[
    {
        "productname":"Veg.Pizaa",
        "price":"350",
        "discount":"",
        "discountprice":"350",
        "imageURL":"http:\/\/farm8.staticflickr.com\/7154\/6694188161_9ee692d854_s.jpg",
        "category":"Pizaa",
        "configurablepone":[{"catname":"Extra","Pro0":"Extra 25g Cheese","Pro1":"Extra 75g Cheese"},"catname":"Nuts","Pro0":"Almonds","Pro1":"Peanuts","Pro2":"Pistachios"}],
        "configurable":"yes"
    },
    {
        "productname":"Core i7 Pc",
        "price":"48000",
        "discount":"2",
        "discountprice":"47040",
        "imageURL":"http:\/\/www.4to40.com\/images\/science\/Basic_Computer_Parts\/Computer.jpg",
        "category":"Pc",
        "configurablepone":[{"catname":"Harddisk","Pro0":"Segate 500Gb","Pro1":"Samsung 250Gb"},{"catname":"Ram","Pro0":"8Gb Ram","Pro1":"4Gb Ram","Pro2":"2Gb Ram"}],
        "configurable":"yes"
    }
]

ご覧のとおり、configurablepone JSONはループごとに繰り返されるため、2番目の製品でも最初の製品の値を取得していますが、以下のように分離する必要があります。

以下のような最初の製品

"configurablepone":[{"catname":"Extra","Pro0":"Extra 25g Cheese","Pro1":"Extra 75g Cheese"},{"catname":"Nuts","Pro0":"Almonds","Pro1":"Peanuts","Pro2":"Pistachios"}]

以下のような2番目の製品

"configurablepone":[{"catname":"Harddisk","Pro0":"Segate 500Gb","Pro1":"Samsung 250Gb"},{"catname":"Ram","Pro0":"8Gb Ram","Pro1":"4Gb Ram","Pro2":"2Gb Ram"}]

ループを変更しようとしましたが、解決策が見つかりませんでした。親切にこれを解決するのを手伝ってください。

4

3 に答える 3

2

私は、あなたの問題が並んでいると思います$subpro1[] = substr($subpro, 0, -1)."}";

したがって、この行を最初に呼び出すと、「Veg.Pizaa」からのデータがに保存され$subpro1[0]ます。この行の2番目の呼び出しは、「Corei7Pc」からのデータを保存します$subpro1[1]

次に、$subproa = "[".implode(",",$subpro1)."]";すべての配列要素を行マージしました。

于 2012-09-14T06:04:08.363 に答える
0

unset($subpro1);の後に 使用してくださいarray_push($totArr, $prodObj2);。以下はソースの例ですこれを試してみてくださいこれはうまくいくかもしれません

$result2211 = mysql_query("select * from products where is_config = 'yes' ");
while($row2211 = mysql_fetch_assoc($result2211))
{
   $sn = $row2211['sn'];
   $allparrentselectq = mysql_query("SELECT * FROM parrentpro where parrentsn = $sn");
   while($allparrentselect = mysql_fetch_assoc($allparrentselectq))
   {
       $childarr = unserialize($allparrentselect['childsn']);
       $subpro  = '{"catname":"'.$allparrentselect['childname'].'",';
       $i = 0;
       foreach($childarr as $childarr):
           $subpro .= '"Pro'.$i++.'":"'.$childarr.'",';
       endforeach;
       $subpro1[] = substr($subpro, 0, -1)."}";
       $subproa = "[".implode(",",$subpro1)."]";
   }
   $prodObj2 = new ProductDetails();
   $prodObj2->productname = $row2211['productname'];
   $prodObj2->price = $row2211['productprice'];
   $prodObj2->discount = $row2211['discount'];
   $prodObj2->discountprice = $row2211['discountprice'];
   $prodObj2->imageURL = $row2211['productimageurl'];
   $prodObj2->category = $row2211['productcat'];
   $prodObj2->configurablepone = $subproa;
   $prodObj2->configurable = 'yes';
   array_push($totArr, $prodObj2);
   unset($subpro1);
}
于 2012-09-14T07:22:40.713 に答える
-1
while($allparrentselect = mysql_fetch_assoc($allparrentselectq))
{
    $childarr = unserialize($allparrentselect['childsn']);
    $subpro  = '{"catname":"'.$allparrentselect['childname'].'",';
    $i = 0;
    foreach($childarr as $childarr):
       $subpro .= '"Pro'.$i++.'":"'.$childarr.'",';
    endforeach;
    $subpro1[] = substr($subpro, 0, -1)."}";
    $subproa = "[".implode(",",$subpro1)."]";
    $subpro1 = array();
}

2番目のwhileループでこれを試してください

于 2012-09-14T05:59:35.233 に答える