2017-01-29 13 views
0

PHPでXML結果をグループ化しソートする

私はStockleHandの問い合わせをUNLEASHEDというソフトウェアから引き出しています。

これはXMLのサンプルです。私は本当にがAVAILABLE DESC

によってSIZEおよびSORTによってGROUPがSIZE BY をグループ化していると戦ってる何

<StockOnHand> 
    <ProductCode>FL1/35/C</ProductCode> 
    <ProductDescription>350ml Flavour 1</ProductDescription> 
    <ProductGroupName>Edible</ProductGroupName> 
    <AllocatedQty>200.0000</AllocatedQty> 
    <AvailableQty>8254.0000</AvailableQty> 
    <QtyOnHand>8454.0000</QtyOnHand> 
</StockOnHand> 


<StockOnHand> 
    <ProductCode>FL1/65/C</ProductCode> 
    <ProductDescription>650ml Flavour 1</ProductDescription> 
    <ProductGroupName>Edible</ProductGroupName> 
    <AllocatedQty>2.0000</AllocatedQty> 
    <AvailableQty>86.0000</AvailableQty> 
    <QtyOnHand>88.0000</QtyOnHand> 
</StockOnHand> 

は、製品コードがありXXX/YY/Xどのように参照してください? YYは、4つの可能な製品サイズのうちの1つです。私は $ size = substr($ product-> ProductCode、-4、2)でこれを得る。これは私がこれまでに設定しているPHPで利用可能なDESC

で 仕分け

。これは正しくすべての製品を示すが、サイズ(12、05、25、50)によってグループ化またはAvailableQty DESCで並べ替えられない

function atUnit15() 
{ 
    echo "<h2>Qty @ Unit 15</h2>"; 
    $prodXml = getProducts('warehouseCode=UNIT-15'); 

    echo "<table border='1'> 
       <tr> 
        <th>Code</th> 
        <th>Description</th> 
        <th>Days since last sale</th> 
        <th>OnHand</th> 
        <th>On Orders</th> 
        <th>Available</th> 

       </tr> 
    <tbody>"; 

    foreach ($prodXml->StockOnHand as $product) { 
     switch ($product->ProductGroupName) { 
      case 'Ice Cream': 
       $size = substr($product->ProductCode, -4, 2); 
       $code = $product->ProductCode; 
       $desc = $product->ProductDescription; 
       $saledays = $product->DaysSinceLastSale; 
       $onHand = floor($product->QtyOnHand); 
       $allocated = floor($product->AllocatedQty); 
       $available = floor($product->AvailableQty); 
       echo "<tr> 
     <td>$code</td> 
     <td> $desc</td> 
     <td> $saledays</td> 
     <td> $onHand</td> 
     <td> $allocated</td> 
     <td> $available</td> 
     </tr>"; 
      default: 
       break; 
     } 
    } 
    echo "</tbody>"; 
    echo "</table>"; 
} 
+0

こんにちは、コードの最後の部分でわかるように、結果をソートしていません。 まず、ソート、グループ化などを行う必要があります。次に印刷することができます。 結果を同じforeachに出力しているので、ソートされたテーブルは決して使用できません。よろしく! :) –

+0

こんにちは、お返事ありがとうございました。正確に - 私が試したグループ/ソートのすべての反復は実際には機能しません。私はこれを約3週間試してみることを試み、投稿することによって正しい方向に軽快になることを期待していました。私が_grouping_で得た最も近いものはスイッチ($ size)でした。しかし、いったん私が他の事件を起こしてしまえば、ミックスには2つのサイズが一緒に混じって表示され始めました。 –

+0

私はあなたの質問を誤解したと思います。 実際、あなたの問題は何ですか?あなたはテーブルをソートしてから印刷するか、AvailableQtyとSizeフィールドを印刷するだけで問題がありますか? –

答えて

0

一つの可能​​な解決策カスタムソート機能使用している:

のような何か:

をすべてStockOnHandを取得するために、XPath関数を使用して
$stockOnHand = $prodXml->xpath('/root/StockOnHand'); 
usort($stockOnHand, function ($t1, $t2) { 
    return substr($t1->ProductCode, -4, 2) > substr($t2->ProductCode, -4, 2); 
}); 
  1. 、私の場合にはrootノードがすべてStockOnHandをラップします。

  2. use usortは基本的に2つのパラメータを必要とします.1つは配列、2つ目は関数です。この関数は配列をソートする条件を適用します。

だけのforeachする前に、コードのこれらの部分を入れて:

usort documentation

ニースの一日を!

関連する問題