2016-08-21 163 views
0

我有理解爲什麼我的含有3個元素陣列必須被切成每2個部分的問題。我希望訪問一個我只向數組中推入的數字,但它似乎打印出索引而不是我推入它的「鍵」值($ number)。價值似乎不正確

我有一個二維數組我推一個ID和一個整數進去,然後對它進行排序:

$array = [[]]; 
array_push($array, $doc[_id], $number); 
array_multisort($array); 

我然後過濾任何空元素:

$array = array_filter($array); //remove null elements 

這所有作品然而,預計陣列看起來像這樣:

unrated.array(5) 
{ 
[2]=> object(MongoId)#32 (1) 
{ ["$id"]=> string(24) "57b99696ce2350100b000029" } 

[3]=> object(MongoId)#31 (1) 
{ ["$id"]=> string(24) "57b998ccce2350181700002b" } 

[4]=> object(MongoId)#33 (1) 
{ ["$id"]=> string(24) "57b99a84ce2350100b00002b" } 

[5]=> int(2) [6]=> int(3) 

} 

再次,這是好的,但它意味着當我循環ove [R使用下面的代碼似乎長於3個要素,因爲我從0-6而不是0-3裁陣列:

$array = array_slice($array, 0, 6, true); //only get 3 elements from array 
foreach ($array as $key => $value) { 
echo $key; //prints out values from 1-5 weirdly.... should just print the $number value 
$id = $value->{'$id'}; 
} 

我想實現是找到元素與被推較早(array_push($陣列,$ DOC [_id],$數))的最低可能值陣列中但是因爲我不能明白爲什麼陣列被分成6而不是3份其更加混亂。

問題簡而言之:如何訪問推入陣列的$數字,以及爲什麼我的數組6看起來只有6個大小,當它只包含3個元素時。

任何幫助,將不勝感激,謝謝。

+0

它是什麼,你希望'array_push($陣列,$ DOC [_id],$號)'做,到底是什麼?因爲實際做的是將___two___值推到數組的末尾。 '$ doc [_id]'的值和'$ number'的值。如果你這樣做了3次,就能解釋爲什麼你會看到陣列中的6個元素。 – Sherif

+0

嗯,我只需要一種方法來訪問我的循環中的ID和$數字,所以我期望將$數字推到數組和ID並對它進行排序將導致數組按$數值排序。但最終我需要解決的主要問題是如何從循環訪問$ number值作爲排序等,如果存在問題,我可以通過更多的研究來解決。 – D3181

+1

那麼,你的期望是錯誤的,因爲'$ number' ___和''id'都是數組中的值。這樣排序數組意味着對__both__值進行排序。你需要做的是將'$ number'直接分配給id鍵。 – Sherif

回答

2

要清楚,array_push只需將一個或多個推到數組的末尾。 array_push的第一個參數是您希望將值推送到的數組,並且任何後續參數都是您希望推送的值的列表。那麼,什麼你和array_push($array, $doc[_id], $number)做的是推動值($doc[_id]$number)到陣列$array結束。 array_push只會在將這些值添加到數組時將下一個可用索引用作關鍵字。它會而不是允許你指定一個密鑰。這與做$array[] = $value是一回事。

要指定必須是直接分配一個值數組鍵像這樣的關鍵:$array[$key] = $value

+0

有沒有辦法將ID推送到數組並將$數字同時設置爲數組的索引? – D3181

+0

是的,你只需要指定'$ number'作爲鍵,這與我在這裏做的完全相反'$ array [$ id] = $ number'然後變成'$ array [$ number] = $ id '。請記住,數組鍵在PHP數組中是唯一的。因此,您不能有多個具有相同值的鍵。請確保[閱讀手冊以獲取有關使用數組的更多詳細信息](http://php.net/language.types.array)。 – Sherif

+0

真棒,非常感謝,我會進一步研究這個!很有幫助。 – D3181