3

$post_id をキーとする配列があります。$data を保存するときに、文字列として保存しました。

foreach( $data as $post_id => $details )
  $string .= "-pid-$post_id-$details";

データを使用するときは、$post_id をキー、$details を値として配列に戻す必要があります。$post_id がわからない場合に爆発させる方法は?

4

4 に答える 4

5

このようにしないでください。文字列をシリアライズする必要がある場合は、json_encode() を使用します。

$string = json_encode($data);

次に、再度デコードする必要がある場合:

$data = json_decode($string);

安全で簡単。

PHPリファレンスは次のとおりです: json_encode()

于 2013-06-28T03:49:32.233 に答える
3

php には serialize というメソッドがあり、配列 ($_POST など) を受け取り、それを文字列に変換します。この文字列は、unserialize で配列に再作成できます。

<?php
    // $_POST looks like this for example:
    // $_POST['value'] = 100;
    $string = serialize($_POST);
    echo $string; // Prints '"a":1:{s:5:"value";s:3:"100";}'
    $data = unserialze($string);
    print_r($data); // Prints Array[0] ( 'value' => '100' )
?>

ユーザー入力をサニタイズしないことについては説明しませんが、ユーザー入力をサニタイズします。

シリアライズ

シリアライズ解除

これは、null バイトを含む可能性があるバイナリ文字列であり、そのように格納および処理する必要があることに注意してください。たとえば、serialize() の出力は通常、CHAR または TEXT フィールドではなく、データベースの BLOB フィールドに格納する必要があります。 -- php ドキュメントから

于 2013-06-28T03:50:58.693 に答える
2

を使用して文字列を分解する必要があります

爆発 ( string $delimiter , string $string [, int $limit ] )

これにより、データが配列として返されます

例えば

foreach($data AS $post_id => $details) {
  $string .= "|||$post_id||$details"
}

次に、データを文字列から取得します

    $newArray = explode('|||', $string);

foreach($newArray AS $key=>$val){
   $holding = explode('||', $val);
   $finalArray[$holding[0]] = $val;
}

これで、文字列内の各項目の ID であるキーと詳細である val を持つ配列が作成されます。

編集:

または Brombomb が提案したように serialize と unserialize を使用します。

于 2013-06-28T03:53:11.683 に答える
1

あなたの質問が理解できれば...

$temp = explode('-pid-', $string);
array_shift($temp);

foreach ($temp as $item) {
    list($post_id, $value) = explode('-', $item);
    $data[$post_id] = $value;
}

json_encodeと関連するjson_decodeは、最初にデータを「文字列化」するためのより良いオプションかもしれません。ただし、選択した方法で実行する正当な理由がある場合があります。

于 2013-06-28T04:10:36.857 に答える