将PHP中的$_POST值转换为字符串

3

我希望能够将所有的提交数据转换为字符串,但只保留值在一个字符串变量中。

所以如果我的提交数据看起来像这样:

Array ( [alloy] => Array ( [0] => K18 [1] => ) 
        [color] => Array ( [0] => Gold [1] => ) 
        [stone] => Array ( [0] => Diamond [1] => ) 
        [dimension] => Array ( [0] => 3cm [1] => ) 
        [button1] => Submit ) 

我希望最终的结果是这样的:$data = 'K18,颜色金色,钻石,3cm';
我尝试使用序列化、将数组合并为字符串、http_build_query等方法,但它们都不符合我的需求。
如果需要了解整个想法,我正在从4组复选框和单选按钮数组中收集数据,并希望将所选值放入分隔符字符串中并保存到我的数据库中。

3
但是 POST 数据确实是一个数组... - JYelton
3
"serialize"或者"json_encode()"听起来正是你需要的。问题在哪里?" - Madara's Ghost
你能给我们提供一些关于你正在收集的数据的更多信息以及为什么像“序列化”这样的方法不起作用的原因吗? - Tyler Carter
3
如果您需要单独访问这些复选框/单选框的值,请不要将它们作为分隔字符串保存在数据库中。这样做只会给您带来痛苦和乏味。 - Marc B
你能澄清一下这句话的意思吗:“将所有POST数据转换为一个数组,但只保留变量中的数据。” - horatio
最简单的方法是在清除空条目后(通过为它们分配值或不分配值),执行implode(";",$arr)。如果您想在数据库上进行搜索,最好使用json_encode()序列化数据。 - Panagiotis
2个回答

2
也许这就是您所需要的:
$s = array();
foreach ($_POST as $k => $v) {
  if (is_array($v)) {
    if ('color' === $k) {
      array_push($s, implode('', array($k, $v[0])));
    } else {
      array_push($s, $v[0]);
    }
  }
}
echo implode(', ', $s); 

这正是我所想的。非常感谢!虽然在我的示例中,我不需要额外的if('color'---$k)检查,但那只是一个简单的打字错误。 - bikey77
当我从相同的复选框数组中选择多个复选框时,我遇到了一个小问题,只有第一个被保存。有什么办法可以保存它们全部吗? - bikey77
@bikey77 当然可以,使用array_push($s, implode('', $v)); - dotoree
我尝试使用这个,但是得到了一个NULL返回。我所做的只是将“颜色”换成了包含string '{ "device_maker" = unknown; "device_model" = Simulator; "first_visit" = "1387478168.109"; "last_visit" = "1388355516.424"; latitude = "37.78583526611328"; locale = en; longitude = "-122.4064178466797"; "opted_in" = 1; "opted_out" = 0; "os_platform" = "iPhone OS"; "os_version" = "7.0.3"; "this_visit" = "1387478168.109"; "user_id" = 1; }'(长度= 389)的我的名字'attributes'中。因此,我仍然不确定如何以编程方式访问此数据。 - Mike S.

1

这里有一个小技巧。在分组时使用name[]而不是name。这样,$_POST["name"]变量将成为一个数组,正如您所希望的那样。

例如:

<input type="checkbox" name="inputname[]" value="1" />
<input type="checkbox" name="inputname[]" value="2" />
<input type="checkbox" name="inputname[]" value="3" />

PHP

print_r($_POST['inputname']);

// 如果全部选中,则输出

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

注意:数组仅包含已选中的值


我的单选框和复选框已经按照你建议的命名。请阅读我更新(重新措辞)的问题。 - bikey77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接