PHP - 当对象数组只有一个对象时处理异常

时间:2017-07-10 06:15:07

标签: php arrays object

我正在寻找处理异常的解决方案。 在API中,有关Orders的详细信息保存在对象数组中: 这是一个例子,至少有两个项目:

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
)

我正在尝试按此顺序提取一个项目表,一切都很好,直到有两个以上的项目。这是我的代码的例子,我使用count()来计算有多少项,为表中特定数量的行创建一个循环:

$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>";

但是当只有一个项目时,它不起作用,因为它计算更深的项目并返回13,整个代码没有应用程序。你能否就如何处理这个例外给我一些提示或解决方案?

提前致谢。

1 个答案:

答案 0 :(得分: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