我在php中使用mongodb并且有一个问题是将$ subitems数组插入到mongodb集合中。
php代码:
if($_SERVER["REQUEST_METHOD"] == "POST"){
$errors = array();
$alarm = array();
$item_name = data::test_input($_POST["item_name"]);
$folder_name = data::test_input($_POST["folder_name"]);
$subitem_num = data::test_input($_POST["subitem_num"]);
for($i=1;$i<=$subitem_num;$i++){
${"subitem_name$i"} = data::test_input($_POST["subitem_name".$i]);
${"subitem_file$i"} = data::test_input($_POST["subitem_file".$i]);
if(count($errors)==0){
$subitems = array(${"subitem_name$i"}=>${"subitem_file$i"});
}
}
if(empty($item_name)){
$errors['item_name']= "insert item";
}
if(empty($folder_name)){
$errors['folder_name']= "insert folder";
}
if(count($errors)==0){
$query = array(
"item_name" => $item_name,
"status" => 0,
"folder_name" => $folder_name,
"subitem" => $subitems
);
$result = items::insert($query);
if($result) $alarm['success_additem'] = "submit done";
}
}
我希望mongodb集合的记录值如下:
{ "_id" : ObjectId("542e71b333e916542a00002e"), "item_name" : "users management", "status" :0, "folder_name" : "users", "subitem" : { "a" : "a.php","b" : "b.php" },"c" : "c.php" }
如何编写用于插入mongodb集合的php代码?
答案 0 :(得分:0)
我认为您的问题是文档中的subitem
字段在插入数据库时永远不会包含多个键/值对。
for($i=1;$i<=$subitem_num;$i++){
${"subitem_name$i"} = data::test_input($_POST["subitem_name".$i]);
${"subitem_file$i"} = data::test_input($_POST["subitem_file".$i]);
if(count($errors)==0){
$subitems = array(${"subitem_name$i"}=>${"subitem_file$i"});
}
}
根据for
循环,您在每次迭代中都会覆盖$subitems
。我认为你的意思是在其中分配一个密钥,在这种情况下,你可以更好地服务于以下内容:
$subitems = array();
for($i = 1; $i <= $subitem_num; $i++) {
$key = data::test_input($_POST["subitem_name".$i]);
$value = data::test_input($_POST["subitem_file".$i]);
if (count($errors) == 0) {
$subitems[$key] = $value;
}
}
为了记录,我不知道为什么你在这里检查$errors
,因为它在此功能的顶部被分配了一次并且似乎没有被修改for
循环;但是,我把它留在原地,所以它与你提供的原始例子对齐。
此外,这里没有理由使用动态命名的变量。固定术语(例如$key
和$value
)使代码更具可读性。