2011-02-17 72 views
2

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

if(isset($_POST['addtag']) && isset($_POST['tagname'])) 
{ 
    if(isset($_POST['tags'])) 
    { 
    $_POST['tags'][] = $_POST['tagname']; 
    } 
    else 
    { 
    $_POST['tags'] = array($_POST['tagname']); 
    } 
} 

我之所以检查,看看是否在“标签”变量被设置是因为有没有保证,它是一个数组却又如此,直到我初始化它,我不采取使用它像一个的机会与一个数组值。

这里发生了什么:
1.我访问的页面的第一次。
2.我添加一个标签('tag1')
3.页面刷新并反映'标签'变量的大小为1并显示'tag1'
4.我添加另一个标签('tag2' )
5.页面刷新并反映'标签'变量的大小为1并显示'tag2'
我说“刷新”,因为这是我知道的唯一术语,它指定了形式指向它所在的页面。

+0

你的意思是不工作? – BoltClock 2011-02-17 23:06:43

+2

将来,您应该包含您的代码生成的任何错误消息,或者描述您没有期望的代码。我们很难诊断“它不工作”。 – meagar 2011-02-17 23:11:18

+0

好的,我更新了我原来的帖子,更准确地描述了这个问题。虽然没有错误消息。 – 2011-02-18 00:07:37

回答

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

3

在PHP中,数组不是固定大小的,它们自动展开,这样就不会(也不能)指定它的初始长度。

$appendedTags[$count + 1]; 

应该是:

$appendedTags = array(); 
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']; 

由于您的初衷似乎是澳鹏d直接$_POST['tags']一个标签,你可以做到这一切在一个单一的步骤,假设$_POST['tags']是一个数组:

$_POST['tags'][] = $_POST['tagname']; 
2

使用数组追加操作

<?php 
$array = array('orange'); 
$array[] = 'apple'; 
$array[] = 'pear'; 

print_r($array); //array('orange', 'apple', 'pear') 
?> 
3

如果你有一个数组,你可以简单地做

$array[] = $newitem; 

或在您的情况

$appendedTags[] = $_POST['tagname']; 
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

0

PHP不包括数组大小初始化,所有PHP数组是动态调整大小,也就是说,如果你有0-4有索引的数组,并尝试访问索引5,你不会结束一个缓冲区溢出并只会收到一个空值。对于变量也是如此,如果您尝试读取不存在的变量,PHP会快速创建它并将其设置为空,并且您将收到一个空值。

有了这样说,$ appendedTags [$计数+ 1]实际上将尝试$ appendedTags [$计数+ 1]来访问值。 PHP会认识到这里没有任何东西存在,用空值创建$ attachedTags数组,并创建索引0 - ($ count + 1),所有索引都为空值。

的正确方法初始化数组是$ appendedTags =阵列(),虽然其本身不只要$ appendedTags为空必需的。然后根据需要分配给数组,PHP将在您使用它时生成剩余的数组。

2

按费利克斯·克林的建议下,我改变了$ _ POST到$ _SESSION现在值在多个页面请求生存。非常感谢!