1

PHP では、文字列が以前に格納された配列を持つことは可能ですか?

echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE];
$_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring";

echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
$_SESSION['REQUEST_TOKEN'][TL_MODE] = array();

echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE]))
{
  echo "is not an array";
}
echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE];

出力は次のとおりです。

valuebefore: A
typebefore: string 
typeafter: string   << the type didnt change to array!
is not an array
valueafter: A       << the value was not updated!

新しい配列を保持できないのはなぜですか? 値も変わらないのはなぜですか?

編集:

関連する他の変数の vardump は次のとおりです。

echo var_dump(TL_MODE)." <br/>";
echo var_dump($_SESSION['REQUEST_TOKEN'])." <br/>";
echo var_dump($_SESSION['REQUEST_TOKEN'][TL_MODE])." <br/>";

出力:

string(2) "FE"
string(32) "A96665c9f1e41d1745bf3a3d75cff33a"
string(1) "A"
4

4 に答える 4

0

@Brent Baisleyは、$ _ SESSION ['REQUEST_TOKEN']が文字列である配列ではないことを正しく理解していますが、基本的な問題は、$_SESSIONデータを破損していたCookie関連の問題であることが判明しました。

クッキーをクリアしてウェブブラウザのキャッシュをクリアするとすぐに、すべて正常に機能しました。

于 2012-10-30T20:06:38.907 に答える
0

この小さな例は私にとってはうまくいきます:

$ php -r '$a="foo"; $a=array("bar"); var_dump($a);'
array(1) {
  [0]=>
  string(3) "bar"
}

var_dumps は、(1)$_SESSION['REQUEST_TOKEN']が配列であり、(2) 定数TL_MODEが null 以外の値であることを示す必要があります。null の場合$_SESSION['REQUEST_TOKEN'][TL_MODE]は と同じで$_SESSION['REQUEST_TOKEN'][]あり、再割り当てしていると思われる場合にのみ配列要素を追加しています。ただし、$_SESSION['REQUEST_TOKEN']が文字列の場合、配列の場合は添え字を追加できません。

于 2012-10-26T11:40:40.760 に答える
0

TL_MODE の値は? それを定数として定義しなかった場合は、配列項目を追加するだけです。これは、あなたが見ている行動を説明します。最後に配列を出力し、何があるかを確認します。

var_dump($_SESSION['REQUEST_TOKEN']);
于 2012-10-26T03:11:44.923 に答える
0

添付された次のコードの出力:

  • 前の値: A
  • typebefore: 文字列
  • typeafter: 配列
  • valueafter: 配列

デバッグのために、TL_MODE および $_SESSION の内容の値をエコーする必要があります。

<?php

    session_start();
    DEFINE('TL_MODE', 'tl_mode_constant');
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = 'A';

    echo "valuebefore: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />';
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = "somestring";

    echo "typebefore: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]) . '<br />';
    $_SESSION['REQUEST_TOKEN'][TL_MODE] = array();

    echo "typeafter: ".gettype($_SESSION['REQUEST_TOKEN'][TL_MODE]);
    if (!is_array($_SESSION['REQUEST_TOKEN'][TL_MODE])){
        echo "is not an array" . '<br />';
    }
    echo "valueafter: ".$_SESSION['REQUEST_TOKEN'][TL_MODE] . '<br />';

?>
于 2012-10-26T03:18:48.857 に答える