【问题标题】:Count the Number of match Word in Json计算Json中匹配词的数量
【发布时间】:2015-04-23 02:22:24
【问题描述】:

我怎么可能计算匹配字符串的单词...就像中匹配的'201'

这是我的后台...

<?php
$con=mysqli_connect("localhost","root","","project");
function loadData()
{
    global $con;
    $listData="";
    $sql=mysqli_query($con,"SELECT fGuests,mGuests FROM reserved");
    while($row=mysqli_fetch_array($sql))
    {
        $mf= array();
        $mf[]=$row['mGuests'].';'.$row['fGuests'];
        $data = array(
                    'mf'=>$mf
                    );
        $listData[]=$data;
    }
    return json_encode($listData);
}
echo loadData();

?> 这是我的 AJAX...

function x()
{
    $.ajax({
        url:"ajax/try.php",
        type:"GET",
        dataType:"JSON",
        data:"",
        success:function(data)
        {
            $.each(data,function(i,item)
            {
                var m=item.match(/201/g).length;
                $("#roomList2").append(m);
            });
        }
    });
}
x();

它只输出 6...

应该是 8...

【问题讨论】:

  • 每行我只计算 6 个tuper-201。你的另外两个来自哪里?
  • 在数组[2]中...有 r 2 201
  • 认为我已经解决了所有问题,当 match 为 .length 失败的数组 [1] 返回 null 时,您会遇到错误。这将停止 .each 循环。我想您可能希望 .each 将所有子项作为一个项返回,而不是循环遍历它们?
  • 好的,抱歉,第一次有点匆忙:这是固定版本的小提琴jsfiddle.net/qs7zt0qz/2我的答案中的完整代码
  • 谢谢谢谢谢谢@DBrown2207!

标签: php jquery json mysqli


【解决方案1】:

我认为您只是在追加之前读取数组中的第一个对象(每个对象循环而不是返回所有连接的结果)。这可能是因为当 match 为数组的第二个元素返回 null 时出现错误(那个元素中没有 201)。需要添加一个 if 来检查 match 是否返回任何内容。您还想在添加这些数字之前将它们加在一起。

function x()
{
    $.ajax({
        url:"ajax/try.php",
        type:"GET",
        dataType:"JSON",
        data:"",
        success:function(data)
        {
            var m = 0;
            $.each(data,function(i,item)
            {
                var matched = item.mf.match(/201/g);
                if(matched) {
                    m += matched.length;
                }
            });
            $("#roomList2").append(m);
        }
    });
}
x();

jsfiddle of this working

【讨论】:

  • 它给了我 Uncaught TypeError: item.match is not a function
  • 是的,我认为它可能会这样做(当然你的原始代码也是如此)?只是复制了它,因为我不确定您返回的数据是否不同。我现在就解决这个问题(只需将 item 更改为 item.mf)
  • 我的 json 是这个.. [{"mf":["tuper-201;tuper-201;tuper-201;tuper-201;tuper-201;tuper-201"]},{ "mf":["4-000;5-000;6-000;1-000;2-000;3-000"]},{"mf":["zxc-301;asd-302;qwe- 303;qwe-201;asd-201;zxc-203"]}]
【解决方案2】:

如何将data(对象)转换为字符串,然后只搜索一次:

var strData = JSON.stringify( data );
var matched = strData.match(/201/g);
var m = matched ? matched.length : 0;

var data = [
	{mf:["tuper-201;tuper-201;tuper-201;tuper-201"]},
	{mf:["tuper-201;tuper-201;tuper-201;tuper-201"]},
	{mf:["tuper-201;tuper-201;tuper-201;tuper-201"]},
	{mf:["4-000;5-000;6-000;1-000;2-000;3-000"]},
	{mf:["4-000;5-000;6-000;1-000;2-000;3-000"]}
];
var strData = JSON.stringify( data );
var matched = strData.match(/201/g);
var m = matched ? matched.length : 0;
alert( m );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2022-06-21
    相关资源
    最近更新 更多