$jokes = $collection->find();
如何将$jokes
转换为数组?
答案 0 :(得分:36)
您可以使用PHP的iterator_to_array
功能,如MongoCursor
docs的示例1所示:
$jokes = $collection->find();
$jokesArray = iterator_to_array($jokes);
答案 1 :(得分:7)
作为克里斯回答的旁注:
array iterator_to_array(Traversable $ iterator [,bool $ use_keys = 是])
注意可选的第二个参数,如果它设置为true(默认值),最终的数组将使用" _id"每个文件的字段。
如果您在mongo查询中应用了排序,则最终数组可能不是您所期望的,这意味着不会保留排序顺序(除非您将 $ use_keys 参数设置为假强>)
答案 2 :(得分:2)
iterator_to_array()
强制驱动程序将所有结果加载到内存中,所以不要对大于内存的结果集执行此操作!
使用这个
$jokes = $collection->find();
foreach ($jokes as $joke) {
var_dump($joke);
}
答案 3 :(得分:2)
iterator_to_array 不适用于嵌套两个以上级别,
使用 typeMap ,您可以将根及其文档转换为数组,它将适用于任何级别的嵌套
findOne($ filter,$ options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->findOne(['myId' => $id ], $options); // returns array
查找($ filter,$ options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->find(['myId' => $id ], $options)->toArray();
答案 4 :(得分:1)
更容易:
findeOne()->getArrayCopy();
如前所述:注意加载大型结果集并将它们转换为数组
您还可以使用typeMap选项设置首选项
'typeMap' =>[
'document' => 'array',
'root' => 'array'
]
答案 5 :(得分:-1)
find()基本上返回MongoDB游标http://www.php.net/manual/en/mongocollection.find.php
这应该适合您的情况
$cursor = $collection->find();
foreach($cursor as $jokes) {
print_r($jokes);
}
答案 6 :(得分:-2)
如果有人来到这里,你也可以使用toArray
方法。
(mongodb> = 1.0.0)
MongoDB \ Driver \ Cursor :: toArray - 返回包含all的数组 此光标的结果
$jokes = $collection->find()->toArray();
或:
$jokes = $collection->find();
$jokesArray = $jokes->toArray();