php附加数组

时间:2011-02-17 23:04:20

标签: php

好的,所以我已经改变了我的代码,看起来更像你所有的建议,但实际的追加仍然没有发生。它只是将数组中的单个值更改为传入的新值,而不是实际的追加值。

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'
我说“刷新”,因为这是我所知道的唯一一个术语,指明表单的动作指向它所在的页面。

9 个答案:

答案 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中的数组是动态的。你没有/不能预先定义一个大小。

http://php.net/array

答案 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将在您使用它时生成其余部分。