2

短い配列をフィールドに格納したい。(配列を項目に分割して別々に保管する理由があることは理解していますが、機能が低下するという犠牲を払って単純な保管オプションを選択しています。)

配列を作成するための私のコードは次のとおりです。

$str = "one,two,three,four";
$array = explode (",",$str)

次に、insert ステートメントを使用して mysql のテキスト フィールドに格納します。正常に格納されているようです。PhPAdmin では、フィールドに ARRAY が表示されます。$array をそのままエコーすると、「ARRAY」と出力されます。

データを取得しようとすると問題が発生します。

を使用して取得しています

while($row = mysql_fetch_array($res)) { 
$array = $row['list']; //that's the field it is stored in 
echo $array; // echoes "ARRAY"

//ここまでは順調ですね。ただし、配列の内容を出力しようとすると、エラー メッセージが表示されます。implode とそれぞれを使用してみました。

$text = implode(",", $array);//yields error message improper argument in implode function
foreach($array as $val) {
    echo $val;
} //yields error message improper argument for for each statement

}

データベース内のエントリが適切な配列でない可能性はありますか? 問題は何でしょうか?提案をありがとう。

4

3 に答える 3

2

この方法で配列を格納する通常の方法は、入力前にデータをシリアル化し、取得時にシリアル化を解除することです。

$array = array('one', 'two', 'three', 'four');
$stringToStore = serialize($array);

後で:

while($row = mysql_fetch_array($res)) {
  $array = unserialize($row['list']);
  var_dump($array);
}
于 2012-04-06T20:53:08.577 に答える
1

挿入しているのは配列ではなく、PHP が配列を文字列形式であると評価しただけです。データを適切に正規化せずに MySQL に配列を格納するには、配列をシリアル化する必要があります。基本的には、次のようなことをしたいでしょう:

$serialized = implode(',', $arrayToStore);

そしてそれをMySQLに保存します。その途中で、次のことを行います。

$unserialized = explode(',', $arrayFromMySQL);
于 2012-04-06T20:50:00.803 に答える
0

配列文字列が次の場合、シリアライズを使用できると思います(シリアライズを使用しない場合)

$str = "one,two,three,four";

次に、データベースに挿入する前に配列にする理由、文字列を直接挿入できると思います。文字列を配列として使用する必要がある場合は、データベースから文字列を取得し、爆発を使用して配列にすることができますお気に入り

while($row = mysql_fetch_array($res)) { 
$array = explode(",", $row['list']); // "one,two,three,four"
echo $array[0]; // one
于 2012-04-06T20:53:03.283 に答える