0

我一直在使用 PHP,但只做基本任务,在尝试构建知识库的一部分时遇到了困难。

创建文章时,您可以上传屏幕截图 - 这些屏幕截图需要存储在暂存区域中,直到文章被保存,并且我已将他们的信息保存到用户会话中。

在 POST 上传中:

...
$new_ss = array();
$new_ss['display_name'] = $ss_name;
$new_ss['server_path'] = "../uploads/";    /* outside of doc root */
$new_ss['server_path'] .= hash_file('md5', $ss_tmp_name) . "_" . $ss_name;

if ( @move_uploaded_file($ss_tmp_name, $new_ss['server_path']) )
{
    $_SESSION['article']['screenshots'] .= $new_ss;
    ...

然后尝试在编辑页面中向用户显示上传:

if ( is_array($_SESSION['article']['screenshots']) && count($_SESSION['article']['screenshots']) > 0 )
{
    echo "<table border=\"1\">\n";
    foreach ( $_SESSION['article']['screenshots'] as $ss )
    {
        ... display table of uploaded images ...

问题是,PHP 没有将 $_SESSION['article']['screenshots'] 视为一个数组——我不明白为什么。

在此处遵循答案后: PHP foreach() with arrays within arrays? 我尝试快速执行以下操作:

function print_array($key, $item) {
    echo "$key -> $item\n";
}

...
{
    $_SESSION['article']['screenshots'] .= $new_ss;
    array_walk_recurisve($_SESSION['article']['screenshots'], 'print_array');
    ...

但是我收到错误“期望参数 1 是数组,给定字符串”。

如果我执行 'error_log($_SESSION['article']['screenshots']);' 无论上传多少图像,它都会打印“Array”,而 print_r 只是自己打印“1”。

有人可以阐明一下吗?

4

1 回答 1

1

好吧,我不确定你的哪个键应该是一个数组,在这一行:

$_SESSION['article']['screenshots'] .= $new_ss;

您通过连接它使其成为一个字符串。如果你想追加为一个数组,你可能应该这样做:

 $_SESSION['article']['screenshots'][] = $new_ss;
于 2012-12-31T12:54:07.407 回答