使用$ key无序的foreach($ list as $ key => $ categoryTournament)

I'm using Laravel, but I think this is general to PHP.

When I try to loop a Collection with with this code

@foreach($categoryTournaments as $key => $categoryTournament)
   {{ $key }} // Means echo
@endforeach

Output: 1 0 2 4 3

I randomly get unorderer keys, instead of having 0 1 2 3 4 as I should expect.

CategoryTournament is an Object, I join the 5 objects:

Collection {#522 ▼
  #items: array:5 [▼
    0 => CategoryTournament {#523 ▼
      #dates: array:3 [▶]
      #table: "category_tournament"
      +timestamps: true
      #fillable: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:6 [▼
        "id" => 164
        "tournament_id" => 71
        "category_id" => 5
        "created_at" => "2016-03-23 00:04:47"
        "updated_at" => "2016-03-23 00:04:47"
        "deleted_at" => null
      ]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      +wasRecentlyCreated: false
      #forceDeleting: false
    }
    1 => CategoryTournament {#524 ▼
      #dates: array:3 [▶]
      #table: "category_tournament"
      +timestamps: true
      #fillable: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:6 [▶]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      +wasRecentlyCreated: false
      #forceDeleting: false
    }
    2 => CategoryTournament {#525 ▼
      #dates: array:3 [▶]
      #table: "category_tournament"
      +timestamps: true
      #fillable: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:6 [▶]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      +wasRecentlyCreated: false
      #forceDeleting: false
    }
    3 => CategoryTournament {#526 ▼
      #dates: array:3 [▶]
      #table: "category_tournament"
      +timestamps: true
      #fillable: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:6 [▶]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      +wasRecentlyCreated: false
      #forceDeleting: false
    }
    4 => CategoryTournament {#527 ▼
      #dates: array:3 [▶]
      #table: "category_tournament"
      +timestamps: true
      #fillable: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      #attributes: array:6 [▶]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      +wasRecentlyCreated: false
      #forceDeleting: false
    }
  ]
}

Any idea why is it happening?

You can Use ksort function to sort the Array According to key

ksort($categoryTournaments); 

This function Arrange your array keys in Ascending order

It is actually completely normal that list is unordered. In PHP it is allowed.

If you want to have ordered list, you should use one of the functions: ksort($categoryTournaments) if that is possible.

If not:$categoryTournaments->sortBy('id'), where id is key you want to sort by. Check other functions inside documentation you provided.