带有 mongoDB 的数组代码点火器


array codeigniter with mongoDB

请帮帮我,由于严格的截止日期,我有一个必须立即解决的案件.. :(我有一个使用preg_match或preg_split来解决这个问题的想法,并且已经尝试了很多方法来使用它,但仍然不明白如何使用它。也许有人可以指导我,关于这个案例,这样我就可以更多地了解如何使用preg_match或preg_split。

/

/从这个字符串

$temp = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}";

如何将其分配给数组,因此结果将是这样的

Array
(
[0]=>foo:bar,bar:foo
[1]=>_id:1,nama:1,nim:1
)
/

/也是第二个字符串

$temp2 = "_id:1,nama:1,nim:1";

如何将其分配给数组,因此结果将是这样的

Array
(
[0] => _id
[1] => nama
[2] => nim
)

感谢您的指导和帮助.. :)

请注意,键和字符串被引号括起来,[ ]$temp以使其成为数组,在第二部分中,我将array[1]转换为 json 字符串,然后又转换回数组,然后使用 array_keys 创建键数组。

$temp = '{"foo":"bar","bar":"foo"},{"_id":1,"nama":1,"nim":1}';
$temp = "[$temp]";
$array = json_decode($temp);
$keys = array_keys(json_decode(json_encode($array[1]), true));

json_encode json_decode array_keys

代码:

<?php
$str1 = "{foo:bar,bar:foo},{_id:1,nama:1,nim:1}";
preg_match_all('/'{(.+?)'},?/', $str1, $matches);
var_dump($matches[1]);
$str2 = "_id:1,nama:2,nim:3";
preg_match_all('/('w+)':'w+,?/', $str2, $matches);
var_dump($matches[1]);
?>

结果:

array
  0 => string 'foo:bar,bar:foo' (length=15)
  1 => string '_id:1,nama:1,nim:1' (length=18)
array
  0 => string '_id' (length=3)
  1 => string 'nama' (length=4)
  2 => string 'nim' (length=3)

参考:

  • preg_match
  • preg_split
  • preg_match_all

解释:

  1. 首先,我们应该决定使用哪个函数。正如手册所说:

    preg_match() 返回模式匹配的次数。那将是 0次(不匹配)或1时间,因为preg_match()将停止 在第一场比赛后搜索。 相反preg_match_all() 继续,直到到达主题结束。 preg_match()回报 FALSE是否发生错误。

    preg_split()返回一个包含主题拆分子字符串的数组 沿着与模式匹配的边界。

    由于您的目标是捕获大括号之间的内容,因此我选择 preg_match_all轻松处理任务。当然,你可以用 preg_split艰难的方式:)

  2. 来到模式:一切都与正则表达式有关
    1. '{(.+?)'},? :我们捕获一对大括号内的内容。 +站起来跳过像{}这样的空括号。尝试将一些空对{}放入$str1,并将+更改为*,看看会发生什么。也是指定非贪婪的?标记。 +?的意思是,我们不需要像{foo}{bar} foo}{bar这样的东西,而是单独foobar,?的意思是可以有逗号,也可以没有逗号。
    2. ('w+)':'w+,? : 我们捕获一对key key:value

希望这对:)有所帮助