2017-07-10 4 views
1

例外を処理するソリューションを探しています。私が持っているAPIで 、注文に関する詳細は、オブジェクトの配列に保存されます。 この例では、少なくとも2つの項目がありますPHP - オブジェクトの配列に1つのオブジェクトしかない場合の例外の処理

Array 
(
[0] => stdClass Object 
    (
     [Cena] => 60,66 
     [CenaJ] => 60,66 
     [Czas] => 2017-07-10 08:01:42 
     [FromAgency] => 1 
     [Ilosc] => 1 
     [ProdKod] => 2322501 
     [RecNo] => 3163466 
     [Status] => 
     [TowKod] => 205 658 
     [TowNaz] => HAM.KLOCKI /P/CORSA 01- 
     [Typ] => Z 
     [VAT] => 23 
     [WazneDni] => 5 
    ) 

一つだけのアイテムがオーダーに存在するときしかし、それはより深く行きます私はこの順序で項目のテーブルを抽出しようとしています

stdClass Object 
(
[Cena] => 60,66 
[CenaJ] => 60,66 
[Czas] => 2017-07-10 08:01:42 
[FromAgency] => 1 
[Ilosc] => 1 
[ProdKod] => 2322501 
[RecNo] => 3163466 
[Status] => 
[TowKod] => 205 658 
[TowNaz] => HAM.KLOCKI /P/CORSA 01- 
[Typ] => Z 
[VAT] => 23 
[WazneDni] => 5 
) 

、および2つの以上の項目があるまですべてが素晴らしいです:、唯一のオブジェクトではなく、配列を返します。ときそこ

$tablica_zam=($buforinfo->GetOrdersResult->BuforInfo); 
print_r($buforinfo->GetOrdersResult->BuforInfo); 
$count= count((array)$tablica_zam); 
echo"</br> Ilość pozycji w buforze zamówień :"; 
print_r($count); 
echo "</br>"; 
$usun=array(); 
for ($i=0;$i<$count;$i++){ 
echo"<tr><td>"; 
print_r($buforinfo->GetOrdersResult->BuforInfo[$i]->ProdKod); 
echo"</td><td>"; 
print_r($buforinfo->GetOrdersResult->BuforInfo[$i]->TowKod); 
echo"</td><td>"; 
print_r($buforinfo->GetOrdersResult->BuforInfo[$i]->TowNaz); 
echo"</td><td>"; 
print_r($buforinfo->GetOrdersResult->BuforInfo[$i]->Ilosc); 
echo"</td><td>"; 

しかし、それは動作しません。ここに私のコードのexmapleは、テーブル内の行の特定のNUMERのループを作成するには、がありますどのように多くのアイテムカウントする)私は(カウントを使用し、あります1つの項目だけです。深い項目を数えて13を返します。したがって、コード全体がアプリケーションを持たないことになります。この例外を処理する方法に関するヒントや解決策を教えてください。

ありがとうございます。

答えて

1

まず、公開していないデータベースラッピングコードがあります。オブジェクトの配列を取得するか、オブジェクトだけを取得するかは、ライブラリとデータベース処理コードに組み込まれます。私にとっては悪いデザインのようだ。

これは、あなたが提供した情報だけで、何をすべきかを理解することは非常に簡単です。

$tablica_zam=($buforinfo->GetOrdersResult->BuforInfo); 
    if (is_array($tablica_zam)) { 
    // An array of objects 
    foreach ($tablica_zam as $row) { 
     echo $row->ProdKod; 
     // whatever else 
    } 
    } else { 
    // It's one object apparently 
    // Just pointing out that the object is the same- call it $row 
    $row = $tablica_zam; 
    echo $row->ProdKod;  

    } 

それがオブジェクトの場合、それは常にオブジェクトの配列として表示されるようにあなたはまた、それに準拠できます。オブジェクトからデータをフェッチする

$tablica_zam=($buforinfo->GetOrdersResult->BuforInfo); 
if (is_object($tablica_zam)) { 
    $tablica_zam = array($tablica_zam); 
} 
// Now the code works the same for either situation 
+1

私は、第二の溶液をお勧めしますので、何のコードの重複はありません。 – Barmar

+0

私は@Barmarに同意します – gview

-1

使用foreachループを。例えば

$tablica_zam = ($buforinfo->GetOrdersResult->BuforInfo); 

$tablica_zamあなたが以下のように行うことができるように配列することを目的としている:

$i=0; 
<?php foreach ($tablica_zam as $items){ 
    $items[$i]->ProdKod; 
// so on ............. 
$i++; 
} ?> 
+0

あなたの答えをより良くフォーマットしてください。コードブロックにプレーンテキストを入れないでください。 – Barmar

+0

彼が持っている問題は、オブジェクトが1つだけの場合、結果が配列にないことです。あなたの答えはそのケースに対処していません。 – Barmar

+0

はい、これを使って問題を解決できます –

関連する問題