循环按类型过滤的json编码

时间:2012-03-31 13:02:43

标签: php javascript

我在PHP中创建一个json编码,如下所示:

$get = mysql_query("SELECT * FROM $table") or die(mysql_error());
$data = array();
        while($row = mysql_fetch_assoc($get)){
            $data[$row['id']][0] = $row['g'];
            $data[$row['id']][1] = $row['w'];
            $data[$row['id']][2] = $row['s'];
            $data[$row['id']][3] = $row['name'];
            $data[$row['id']][4] = $row['type'];
            }
$data4 = json_encode($data);        

我将它分配给js变量:var bdata;

所以我想要做的就是循环过滤[4] = type。

过滤的内容

这是我的循环:

 for(var key in bdata){
 //stuff here
 }

但是这将循环所有这些...但我想只循环具有某个值的[4](类型)的值,让我们说值为“2”。

有办法吗?

3 个答案:

答案 0 :(得分:2)

您应该在php中过滤数组并将过滤后的数组传递给JS变量:

function filter($item) {
    return $item[4] == $whateverYouWant;
}
$data4 = json_encode(array_filter($data, "filter"));

答案 1 :(得分:1)

您正在遍历行。不是你的专栏。对于每一行,都有一个名为type的列。如果你想处理它,你可以获取它。他们正在构建JSON,它很快就会在JS方面不可读,你会拉扯你的头发。

所以最好有命名键。

你应该以这种方式完成它,

$get = mysql_query("SELECT id, g, w, s, name, type FROM $table") 
    or die(mysql_error());
// If you only need to fetch the type then just list `type` on the above list.
$data = array();
        while($row = mysql_fetch_assoc($get)){
            $data[] = $row;
            // or
            // $data[$row['id']] = $row;
        }
$data4 = json_encode($data);  

在JS端。

for(var key in bdata){
    var type = bdata[key].type;
    // process type
}

答案 2 :(得分:0)

如果整个数组存储在JS中的单个变量中,则必须遍历所有键值对,无论它们是否具有您想要的ID。

您需要检查每个kvp以查找您要查找的ID。像这样的东西

foreach(var key in bdata)
{
   if (key.id === 4)
   {
     //do your stuff here
   }
}

以这种方式循环非常便宜,因此花费太多时间通过完全跳过一些元素来优化它是没有意义的。