2009-12-14 2 views
2

Когда форма будет размещена, я получаю некоторые значения CheckBox, как показано ниже: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 переменные могут иметь другие переменные формы тоже, но все значения Флажок будут названы с приставкой «ЧК»

ответ

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

+0

Я предполагаю, что могу использовать $ _POST для $ input .. Однако массив $ output [] (...) кажется синтаксически неправильным. – Jake

+0

@Vincent: Похоже, что @cletus не имеет знака равенства. Я добавил его для него. – Asaph

0

взглянуть на функцию json_encode() PHP. Вам придется немного массировать свой массив, чтобы получить точный формат JSON, который вам нужен.

+0

Я не так сильно беспокоюсь за JSON format..I я заинтересован в логике для сканирования с помощью динамически генерируемых значений CheckBox которые имеют префикс chk. – Jake

+0

@ Vincent Посмотрите на ответ @Cletus. – Asaph

+0

Спасибо .. Но $ output [] массив (...) кажется синтаксически неправильным .. – Jake

0

Heres пример ...

$_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 .= ']'; 
Смежные вопросы