如何使用$ _POST传递数组?

时间:2013-10-30 18:24:27

标签: php arrays array-merge

我知道有一些类似的问题,但没有一个能解决我的问题。

我有一个简单的表格:

<form method="post">
   Import data: <textarea type="text" name="import"></textarea>
   <input type="submit">
</form>

然后我从“import”字段获取数据:

$current = my_data();
$import = $_POST['import'];
$merge = array_merge($current,$import);

问题是,即使我粘贴:

array('foo' => 'bar')

我明白了:

  

警告:array_merge():参数#2不是数组   (地址)   在线(线)

我无法更改HTML标记,我必须在那里粘贴数组。任何想法如何解决它?我一直在阅读有关serialize()但不确定是否有任何序列化的数据是array()不是PHP的数组()。这是为什么?有解决方案吗非常感谢!

更新

$ current为我的主题保留一系列选项。 $ merge应该保存具有不同值的相同键(大约30-50个,不是多维但可能在将来),但当然用户可能会添加新的,所以为了忽略它我实际上使用:

$imported_options = array_merge($current_options , array_intersect_key($_POST["import"], $current_options ));

(简化了这个,因为它只是一个例子)

所以我毕竟想从表单加载一个数组并用它更新另一个数组。

4 个答案:

答案 0 :(得分:0)

你可以做到

$current['import'] = $import;

或者你可以这样改变你的HTML:

<textarea type="text" name="myarray['import']"></textarea>

在php中:

$import = $_POST['myarray'];

答案 1 :(得分:0)

PHP不会在$ _GET / $ _ POST中创建数组,除非你告诉它:

Import data: <textarea type="text" name="import[]"></textarea>
                                               ^^---- need these

如果没有[],PHP会将任何重复的字段名称视为要覆盖的字符串。使用名称中的[],PHP会将它们视为数组中的新元素。

答案 2 :(得分:0)

第二个参数不是数组。

$_POST['import'] = value received from the form.

说完了,试试:

$current [] = $_POST['import'];

答案 3 :(得分:0)

你想从$ _POST ['import']获得什么?

你使用textarea来获取数组吗?

如果它只是一个变量,那么使用array_push

http://php.net/manual/es/function.array-push.php

对于array_merge,你需要有2个数组。