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']);」を実行すると、アップロードされた画像の数だけ「配列」を出力し、print_rは「1」を単独で出力しました。

誰かが光を当てることができますか?

4

1 に答える 1

1

次の行で、どのキーを配列にする必要があるのか​​よくわかりません。

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

あなたはそれを連結することによってそれを文字列にしています。配列として追加する場合は、おそらく次のようにする必要があります。

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