【发布时间】:2011-10-06 03:22:56
【问题描述】:
$jokes = $collection->find();
如何将$jokes 转换为数组?
【问题讨论】:
$jokes = $collection->find();
如何将$jokes 转换为数组?
【问题讨论】:
iterator_to_array 不适用于嵌套超过 2 层,
使用 typeMap 可以将 root 及其文档转换为数组,它适用于任何级别的嵌套
findOne($filter,$options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->findOne(['myId' => $id ], $options); // returns array
find($filter,$options)
$options = ["typeMap" => ['root' => 'array', 'document' => 'array']];
$collection->find(['myId' => $id ], $options)->toArray();
【讨论】:
iterator_to_array() 强制驱动程序将所有结果加载到内存中,所以不要对大于内存的结果集执行此操作!
用这个
$jokes = $collection->find();
foreach ($jokes as $joke) {
var_dump($joke);
}
【讨论】:
作为 Chris 回答的旁注:
array iterator_to_array ( Traversable $iterator [, bool $use_keys = 真的])
注意可选的第二个参数,如果设置为true(默认),最终数组将使用每个文档中的“_id”字段进行索引。
如果您在 mongo 查询中应用了排序,最终的数组可能不是您所期望的,这意味着不会保留排序顺序(除非您将 $use_keys 参数设置为 假)
【讨论】:
您可以使用 PHP 的 iterator_to_array 函数,如 MongoCursor docs 的示例 1 中所建议的:
$jokes = $collection->find();
$jokesArray = iterator_to_array($jokes);
【讨论】:
如果有人来这里,你也可以使用toArray方法。
(mongodb >=1.0.0)
MongoDB\Driver\Cursor::toArray — 返回一个包含所有 此光标的结果
$jokes = $collection->find()->toArray();
或:
$jokes = $collection->find();
$jokesArray = $jokes->toArray();
【讨论】:
容易多了:
findeOne()->getArrayCopy();
如前所述:小心加载大型结果集并将它们转换为数组
您还可以使用 typeMap 选项设置您的偏好
'typeMap' =>[
'document' => 'array',
'root' => 'array'
]
【讨论】:
find() 基本上返回 MongoDB 游标http://www.php.net/manual/en/mongocollection.find.php
这应该适用于您的情况
$cursor = $collection->find();
foreach($cursor as $jokes) {
print_r($jokes);
}
【讨论】: