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.