我遇到问题,理解为什么我的数组包含3个元素必须分成2个部分。我希望访问一个我正在推入数组的数字,但它似乎打印出索引而不是我推入它的'key'值($ number)。
我有一个2d数组我正在将ID和整数推入,然后对其进行排序:
$array = [[]];
array_push($array, $doc[_id], $number);
array_multisort($array);
然后我过滤掉任何空元素:
$array = array_filter($array); //remove null elements
这一切都像id期望的那样,但是这个数组看起来像这样:
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)
}
同样,这很好,但这意味着当我使用下面的代码循环数组时,它似乎长于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($ array,$ doc [_id],$ number);)然而,因为我无法理解为什么数组被分成6个而不是3个部分,这更令人困惑。
简短的问题:如何访问推入数组的$ number,为什么我的数组6只包含3个元素,看起来大小为6个。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
要明确,array_push
只需将一个或多个值推送到数组的末尾。 array_push
的第一个参数是您希望将值推送到的数组,任何后续参数都是您希望推送的值列表。因此,您对array_push($array, $doc[_id], $number)
所做的工作是将两个值($doc[_id]
和$number
)推送到数组$array
的末尾。 array_push
只会在将这些值添加到数组时使用下一个可用索引作为键。 不允许您指定密钥。这与执行$array[] = $value
相同。
要指定键,您必须直接为数组键指定值,如下所示:$array[$key] = $value
。