2009-12-14 57 views
2

当窗体被贴出来,我得到像下面的一些复选框值:PHP复选框阵列中的

Array ([chk0] => true , 
     [chk1] => true, 
     [chk3] => true, 
     [chk1002] => on, 
     [chk1005] => on 
    ) 

使用PHP,我怎么可以使用上述变量构建这样一个JSON请求?

 "data": 
     [ 
      { 
       "checkboxval": true, 
       "id": 0 
      }, 
      { 
       "checkboxval": true, 
       "id": 1 
      }, 
      { 
       "checkboxval": true, 
       "id": 3 
      }, 
      { 
       "checkboxval": true, 
       "id": 1002 
      }, 
      { 
       "checkboxval": true, 
       "id": 1005 
      } 
     ] 

请注意,我的POST变量可以有其他形式的变数太多,但所有的复选框值将与前缀“CHK”

回答

1
$output = array(); 
foreach ($input as $k => $v) { 
    $output[] = array(
    'checkboxval' => !!$v, 
    'id' => preg_replace('!^chk!', '', $k), 
); 
} 
header('Content-Type: application/json'); 
echo json_encode(array('data' => $output)); 
+0

如何在$ input中获取所有发布的复选框? – Jake 2009-12-14 07:31:30

+0

我想我可以使用$ _POST进行$输入..但是,$ output [] array(...)似乎在语法上是错误的.. – Jake 2009-12-14 07:38:37

+0

@Vincent:它看起来像@cletus省略了等号。我为他添加了它。 – Asaph 2009-12-14 07:51:07

0

看一看的json_encode() PHP函数命名。你必须稍微按摩你的数组才能得到你想要的确切的JSON格式。

+0

我不是为JSON format..I这么多担心我感兴趣的逻辑扫描通过动态生成的复选框值它有一个chk的前缀。 – Jake 2009-12-14 07:32:45

+0

@Vincent看看@Cletus的答案。 – Asaph 2009-12-14 07:40:56

+0

Thanks..But $ output [] array(...)似乎在语法上是错误的。 – Jake 2009-12-14 07:43:29

0

这里有一个例子...

$_POST["chk1"] = "Hello"; 
$_POST["chk2"] = "World"; 
$jsonArray = array(); 
foreach($_POST as $key => $val){ 
    if(preg_match("/chk/", $key)){ 
    $jsonArray[$key] = $val; 
    } 
} 
$jsonArray = array("Data" => $jsonArray); 
$json = json_encode($jsonArray); 
echo "<pre>"; 
echo $json; 
echo "</pre>"; 

输出这样的:

{"Data":{"chk1":"Hello","chk2":"World"}} 
1
foreach ($_POST as $k => $v) { 
    $output[] = array(
    'checkboxval' => ($v=='on'? true : ($v=='off' ? false : !!$v)), 
    'id' => preg_replace('!^chk!', '', $k), 
); 
} 
header('Content-Type: application/json'); 
echo json_encode(array('data' => $output)); 

贷谁该代码提供了基础克莱图斯。

0

我没有测试过这还,但也许是这样的:

$json = '"data": ['; 
$first = true; 
foreach ($_POST as $k => $v){ 
    if (preg_match('/^chk(\d+)$/', $k, $m)){ 
     if ($first) $first = false; else $json .= ", "; 
     $json .= sprintf('{ "checkboxval" : %s, "id" : %s }', ($v && $v != "off") ? "true" : "false", $m[1]); 
    } 
} 
$json .= ']';