為了更容易理解這個問題,我將硬編碼我正在使用集合的資料,并解釋這個問題。
讓我們假設以下JSON格式的資料結構,
。{
"shelters_with_linear_distances"/span>: [
{
"id": 3,
" shelterName": "第三庇護所"。
"緯度": "5.0034000",
"經度": "70.1230000",
"linear_distance": 3.1352984845527
},
{
"id": 4,
" shelterName": "第四避難所"。
"緯度": "5.1413000",
"經度": "70.2250000",
"linear_distance": 2.7850629146201
},
{
"id": 5,
" shelterName": "第五避難所"。
"緯度": "5.2220000",
"經度": "70.1320000",
"linear_distance": 2.6042789457753
}
]
}
下面的過濾方法是在上述資料結構中'shelters_with_linear_distance'的集合格式上運行的,并且$minimum_distance_to_a_shelter是一個動態計算的值,持有的資料型別是double。
$nearest_shelter = $shelters_with_linear_distances_from_user
->filter(function ($shelter, $key) use ($minimum_distance_to_a_shelter) {
return $shelter['linear_distance'] == $minimum_distance_to_a_shelter;
});
這里的問題是,如果我把過濾器方法回傳的值(也就是$nearest_shelter)作為JSON發送到前端。
在postman中,我看到了以下的輸出,
{
"nearest_shelter"/span>: {
"2": { // <------------------------------------ 我無法弄清楚這個鍵'2'是從哪里來的。。
"id"。5,
" shelterName": "第五避難所"。
"緯度": "5.2220000",
"經度": "70.1320000",
"linear_distance": 2.6042789457753
}
}
}
問題是我無法弄清楚我在上面一行代碼中用箭頭指向的鍵是從哪里來的。
*) 如果這個值'2'永遠不會改變,那么在后面的代碼中,我可以一直將$nearest_shelter作為$nearest_shelter['2']來訪問,這也沒什么。但問題是,該鍵的值會根據我從資料庫接收的資料而改變。
有一次,這個鍵的值是'1',然后一旦我向資料庫添加了一些新的記錄,它就是'2'。此外,還有一次,沒有一個鍵被標記為'1'或'2',而我想要的庇護所直接在集合中。
誰能幫助我理解為什么會發生這種情況,以及如何擺脫這種情況,因為我想在代碼的后半部分訪問$nearest_shelter內的值,我不想在代碼的后半部分獲得一個我事先不知道值的鍵來訪問$nearest_shelter。
(我正在做的專案使用laravel 5.2)
謝謝你。
uj5u.com熱心網友回復:
當你過濾一個集合時,索引是被保留的。
"2"是因為這個元素在你的原始集合中是第三個(所以索引是2)。
要解決這個問題,只需在過濾器后添加->values():
$nearest_shelter = $shelters_with_linear_distances_from_user
->filter(function ($shelter, $key) use ($minimum_distance_to_a_shelter) {
return $shelter['linear_distance'] == $minimum_distance_to_a_shelter;
})->值()。
這樣一來,索引將被重置,并像往常一樣從0開始。
從檔案中(如你問題中所說的Laravel 5.2)檔案:
values方法回傳一個新的集合,其中的鍵被重置為連續的整數
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320602.html
標籤:
