web-dev-qa-db-ja.com

文字列への配列PHP?

PHP配列を文字列に変換するための最良の方法は何ですか?
型の配列である変数$typeがあります。

$type = $_POST[type];

各エントリを|で区切って1つの文字列としてデータベースに保存します。

スポーツ|フェスティバル|その他

226

単純に implode を使用してください。

implode("|",$type);
284

json_encode() を使用できます。

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

あとで json_decode() を使ってDBから文字列をデコードするだけです。 それ以外は無駄です。JSONは配列の関係をそのまま使用して後で使用することができます。

189
Jakub

いいえ、あなたはそれをあなたのデータベースに単一の文字列として保存したくはありません。

serialize()を使うこともできますが、これはあなたのデータを検索することを困難にし、扱うことを困難にし、そしてスペースを無駄にするでしょう。

他のエンコードもできますが、一般的に同じ問題が発生しやすいです。

あなたがDBを持っている全体の理由はあなたがこのような仕事を些細に成し遂げることができるということです。配列を格納するためのテーブルは必要ありません。配列として表現できるテーブルが必要です。

例:

id | Word
1  | Sports
2  | Festivals
3  | Classes
4  | Other

次のようなテーブルを用意するのではなく、SQLを使用してテーブルからデータを選択するだけです。

id | Word
1  | Sports|Festivals|Classes|Other

それは誰もがリレーショナルデータベースでスキーマを設計する方法ではありません、それは完全にそれの目的を破ります。

35
Incognito
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

なぜJSON:あなたはそれをほとんどのプログラミング言語で使うことができます、phpのserialize()関数によって作られた文字列はPHPだけで読むことができます異なるプログラミング言語で書かれたアプリケーション間で共有される

33
sumit

最善の方法の1つ:

echo print_r($array, true);
28

implode()

<?php
$string = implode('|',$types);

しかし、Incognitoは正しいです、あなたはおそらくそれをそのように格納することを望まないでしょう - それはあなたのデータベースのリレーショナルパワーの全浪費です。

シリアライズに行き詰まった場合は、 json_encode() の使用も検討してください。

11
timdev

これはキーと値を節約します

function array2string($data){
    $log_a = "";
    foreach ($data as $key => $value) {
        if(is_array($value))    $log_a .= "[".$key."] => (". array2string($value). ") \n";
        else                    $log_a .= "[".$key."] => ".$value."\n";
    }
    return $log_a;
}

誰かに役立つことを願っています。

10
Ante Braovic
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

これで、この$ string_array値をデータベースに挿入できます。

4

ストア連想配列にはserializeを使うことができます。

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

file_put_contents('stored-array.txt', serialize($arr));

そしてunserializeを使ってロードします。

$arr = unserialize(file_get_contents('stored-array.txt'));

print_r($arr);

しかし、配列(例えば設定ファイルなど)を使ってダイナミクスの.phpファイルを作成する必要がある場合は、次のようにvar_export(..., true);を使用できます。

ファイルに保存:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

$str = preg_replace('#,(\s+|)\)#', '$1)', var_export($arr, true));
$str = '<?php' . PHP_EOL . 'return ' . $str . ';';

file_put_contents('config.php', $str);

配列値を取得します。

$arr = include 'config.php';

print_r($arr);

PHP文字列関数implode()を使用できます

好きです、

<?php
  $sports=$_POST['sports'];;
  $festival=$_POST['festival'];
  $food=$_POST['food'];
  $array=[$sports,$festival,$food];
  $string=implode('|',$array);
  echo $string;
?>

たとえば、$sports='football';$festival='janmastami';$food='biriyani';の場合

出力は次のようになります。

football|janmastami|biriyani

PHP implode()関数についての詳細は w3schools を参照してください。

3
user8140418