好的,所以我已经改变了我的代码,看起来更像你所有的建议,但实际的追加仍然没有发生。它只是将数组中的单个值更改为传入的新值,而不是实际的追加值。
if(isset($_POST['addtag']) && isset($_POST['tagname']))
{
if(isset($_POST['tags']))
{
$_POST['tags'][] = $_POST['tagname'];
}
else
{
$_POST['tags'] = array($_POST['tagname']);
}
}
我检查是否已设置'tags'变量的原因是因为无法保证它是一个数组,所以我不会像使用数组值初始化它一样使用它。
这是发生的事情:
1.我第一次访问该页面
2.我添加了一个标签('tag1')
3.页面刷新并反映'tags'变量的大小为1并显示'tag1'
4.我添加另一个标签('tag2')
5.页面刷新并反映'tags'变量的大小为1并显示'tag2'
我说“刷新”,因为这是我所知道的唯一一个术语,指明表单的动作指向它所在的页面。
答案 0 :(得分:4)
关于您的更新:
$_POST
在请求之间不是持久的。它只包含HTML页面发送给服务器的值。因此,只要您不在每个请求中发送每个已创建标记的列表,$_POST['tags']
将始终为空。
我认为你想要的是session。
您还应该阅读form handling in PHP。
你唯一要做的就是:
$appendedTags = $_POST['tags'];
$appendedTags[] = $_POST['tagname'];
或者如果你真的想在进一步处理中使用$_POST['tags']
(你不应该这样做,我认为你脑子里有一个错误的$_POST
概念(因为你写了一个评论发布 ....这是什么意思?)):
$_POST['tags'][] = $_POST['tagname'];
对您的代码的一些评论:
在PHP中,您不必初始化数组的长度。您可以根据需要添加任意数量的元素。您可以将其视为列表或表格。
您的for
循环只会将所有值从一个数组复制到另一个数组。只需将$_POST['tags']
中包含的数组分配给新变量即可实现相同目的。
如果您未指定索引,则会为新值选择下一个最高索引。
你真的应该阅读arrays in PHP。
答案 1 :(得分:3)
在PHP中,数组的大小不固定,它们会自动扩展,因此您不能(也不能)指定其初始长度。
$appendedTags[$count + 1];
应该是:
$appendedTags = array();
答案 2 :(得分:3)
这不是您创建具有给定长度的数组的方式:
$appendedTags[$count + 1];
相反,创建一个空数组并附加到它:
$appendedTags = array();
for($i = 0; $i < $count; $i++)
{
$appendedTags[] = $curTags[$i];
}
//add the new tag to the end of the appended tags array
$appendedTags[] = $_POST['tagname'];
由于您的初始意图似乎是将标记直接附加到$_POST['tags']
,因此您可以在一个步骤中执行所有操作,假设$_POST['tags']
是一个数组:
$_POST['tags'][] = $_POST['tagname'];
答案 3 :(得分:3)
如果您有一个数组,只需执行
即可在其末尾添加一个新项目$array[] = $newitem;
或在你的情况下
$appendedTags[] = $_POST['tagname'];
答案 4 :(得分:2)
使用数组追加运算符
<?php
$array = array('orange');
$array[] = 'apple';
$array[] = 'pear';
print_r($array); //array('orange', 'apple', 'pear')
?>
答案 5 :(得分:2)
所有不必要的。这将完全符合您的目标。
if (isset($_POST['addtag'], $_POST['tagname'])) {
// put the tagname at the end of the tags array
$_POST['tags'][] = $_POST['tagname'];
}
PHP中的数组是动态的。你没有/不能预先定义一个大小。
答案 6 :(得分:2)
根据Felix Kling的建议,我将$ _POST更改为$ _SESSION,这些值现在可以在多个页面请求中存活。非常感谢!
答案 7 :(得分:0)
考虑使用PHP的array_merge代替。
答案 8 :(得分:0)
PHP不包括数组大小初始化,因为所有PHP数组都是动态可调整大小的,这意味着如果你有一个索引从0到4的数组,并尝试访问索引5,你将不会得到一个缓冲区溢出,只会收到一个空值。对于变量也是如此,如果您尝试读取不存在的变量,PHP将快速创建它并将其设置为null,并且您将收到一个空值。
话虽如此,$ attachedTags [$ count + 1]实际上会尝试访问$ attachedTags [$ count + 1]的值。 PHP会意识到那里不存在任何东西,用null值创建$ attachedTags数组,并创建索引0 - ($ count + 1),所有这些都是空值。
初始化数组的正确方法是使用$ attachedTags = array(),尽管只要$ attachedTags为null,就不需要它。然后根据需要分配给数组,PHP将在您使用它时生成其余部分。