Ошибка в итерации / объектных массивах php

0

Добрый день, я очень смущен, почему я продолжаю получать неопределенную ошибку, когда пытался использовать "$x-> split" при повторении через мой массив.

дд

$divs = array(3) {
  ["items"]=>
  array(4) {
    [0]=>
    object(stdClass)#247 (13) {
      ["type"]=>
      int(6)
      ["description"]=>
      NULL
      ["transactionType"]=>
      string(4) "Bill"
      ["account_xid"]=>
      int(4)
      ["gt_xid"]=>
      int(1)
      ["u_xid"]=>
      int(2001)
      ["po_xid"]=>
      int(0)
      ["debit"]=>
      float(144)
      ["credit"]=>
      float(0)
      ["date_at"]=>
      string(19) "2014-10-17 19:37:50"
      ["ref_no"]=>
      string(2) "22"
      ["id"]=>
      int(1)
      ["split"]=>
      array(1) {
        [0]=>
        object(stdClass)#246 (1) {
          ["gt_xid"]=>
          int(1)
        }
      }
    }
    [1]=>
    object(stdClass)#248 (12) {
      ["type"]=>
      int(6)
      ["description"]=>
      NULL
      ["transactionType"]=>
      string(4) "Bill"
      ["account_xid"]=>
      int(4)
      ["gt_xid"]=>
      int(2)
      ["u_xid"]=>
      int(2001)
      ["po_xid"]=>
      int(0)
      ["debit"]=>
      float(0)
      ["credit"]=>
      float(0)
      ["date_at"]=>
      string(19) "2014-11-15 01:40:00"
      ["ref_no"]=>
      string(0) ""
      ["id"]=>
      int(4)
    }
    [2]=>
    object(stdClass)#249 (13) {
      ["type"]=>
      int(6)
      ["description"]=>
      NULL
      ["transactionType"]=>
      string(4) "Bill"
      ["account_xid"]=>
      int(4)
      ["gt_xid"]=>
      int(3)
      ["u_xid"]=>
      int(2001)
      ["po_xid"]=>
      int(0)
      ["debit"]=>
      float(2980)
      ["credit"]=>
      float(0)
      ["date_at"]=>
      string(19) "2014-11-15 06:25:55"
      ["ref_no"]=>
      string(4) "0998"
      ["id"]=>
      int(6)
      ["split"]=>
      array(1) {
        [0]=>
        object(stdClass)#254 (1) {
          ["gt_xid"]=>
          int(3)
        }
      }
    }
    [3]=>
    object(stdClass)#250 (13) {
      ["type"]=>
      int(6)
      ["description"]=>
      NULL
      ["transactionType"]=>
      string(4) "Bill"
      ["account_xid"]=>
      int(4)
      ["gt_xid"]=>
      int(4)
      ["u_xid"]=>
      int(2001)
      ["po_xid"]=>
      int(0)
      ["debit"]=>
      float(500)
      ["credit"]=>
      float(0)
      ["date_at"]=>
      string(19) "2014-11-15 06:37:07"
      ["ref_no"]=>
      NULL
      ["id"]=>
      int(8)
      ["split"]=>
      array(1) {
        [0]=>
        object(stdClass)#256 (1) {
          ["gt_xid"]=>
          int(4)
        }
      }
    }
  }
  ["accountName"]=>
  string(15) "Inventory Asset"
  ["startingBalance"]=>
  int(0)
}

дело в том, что я использую такой формат, когда я перебираю свой массив на своих элементах. здесь, как я это делаю.

@foreach($divs as $div)
 {{ $div['accountNam'] }}
 @foreach($div['items'] as $x)
 {{ $x->description }}
 {{ $x->date_at }}
 {{ $x->transactionType }}
 @endforeach
@endforeach

этот код выше работает отлично, но когда я добавляю третий внутренний цикл

 @foreach($divs as $div)
  {{ $div['accountNam'] }}
  @foreach($div['items'] as $x)
    {{ $x->description }}
    {{ $x->date_at }}
    {{ $x->transactionType }}
       @foreach($x->split as $z)
        ----I get error here---
       @endforeach
  @endforeach
@endforeach

Я получаю эту ошибку: Неопределенное свойство: stdClass :: $ split

когда я пытался dd ($z-> split)

Я получаю этот результат, что означает, что он не пуст или не существует

array(1) { [0]=> object(stdClass)#246 (1) { ["gt_xid"]=> int(1) } } 

Можете ли вы помочь мне найти то, что мне не хватает здесь. Чтобы это сработало. Я уже пытался использовать $ z ['gt_xid'], но он дает мне еще одну ошибку: нельзя использовать объект типа stdClass в качестве массива. Спасибо, что потратили время, чтобы прочитать это. хорошего тебе дня!

  • 0
    Почему вы добавляете каждую управляющую структуру с @ ? Это, в частности, говорит PHP игнорировать любые возможные ошибки и предупреждения, сгенерированные там, что значительно усложняет отладку кода. Избавьтесь от них, и вам будет намного проще отладить время.
  • 0
    я использую лезвие здесь
Теги:
object
arrays

2 ответа

1
Лучший ответ

в вашем массиве $div['items'] - это один элемент (индекс 1) без свойства split.

если это может произойти, вам нужно защититься от него. Я не знаю, какой синтаксис вы используете, но он будет следовать следующим строкам:

if (isset($x->split) :
  @foreach($x->split as $z)
    // do stuff
  @endforeach
endif;
  • 0
    Спасибо за это @cypherabe .. Я не сразу понял это .. :)
1

Я считаю, что второй элемент (ключ 1) вашего массива не имеет значения "split". Вы должны проверить, определено ли "split" (isset($x->split)), прежде чем пытаться его зацикливать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню