配列を文字列PHPに?


282

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

$type = $_POST[type];

それをデータベースに単一の文字列として保存し、各エントリを次のように区切ります|

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


24
シリアル化された値をデータベースに挿入しないでください。:ここに理由ですstackoverflow.com/questions/7364803/...
NullUserException

14
@NullUserExceptionఠ_ఠシリアル化された値をDBに挿入すると目が焼けてしまうことに同意しますが、彼の状況はわかりません。
AngryHacker

4
この質問は再開する必要があると思います。初心者にとっては便利な質問であり、話題から外れているとは思いません。
SaidbakR 2014

1
配列の一部の値に文字がある場合はどうなりますか?
Sumit

その後、それらの文字をエスケープできます。ここでそれを読んでください。php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

回答:



224

json_encode()を使用できます

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

echo json_encode($arr);
?>

後でjson_decode()を使用して、DBから文字列をデコードします。 それ以外のものは役に立たず、JSONは後で使用するために配列の関係を維持します!


40
他のものは役に立たない」...おそらくデータの正規化を除いて。
Dan Lugg

5
私の上のRofl @コメント。あなたが言うように、包括的陳述はほとんど常に、役に立たない。
アーロンコール

12
みんなが楽しませてくれてうれしいです:)
Jakub '23

16
「一般化だけでなく、一般化を一掃することは常に間違っている。常に。」;)
Olie

これが鍵を守るのが好きです。これは後で使用するときに非常に便利です。
Apolymoxic

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

なぜJSON:ほとんどのプログラミング言語で使用できます。phpのserialize()関数によって作成された文字列はPHPでのみ読み取り可能であり、データベースで作成されたアプリケーション間でデータベースが共有されている場合、そのようなものを特別にデータベースに保存したくないでしょう。異なるプログラミング言語


1
私が使用しているJFIは$ data = json_decode($ jsonString、true)を呼び出さなければなりませんでした
ターミナル性

2番目の引数はオプションであり、ほとんどの場合、それなしでも機能します。
16

これは優れた1次元または多次元の配列で機能し、私の意見ではこれが受け入れられる答えになるはずです。2番目のパラメーターとしてtrueを追加することも検討してください。
2017年

36

いいえ、そのようにデータベースに単一の文字列として保存する必要はありません。

使用することはできますserialize()が、これによりデータの検索、操作が困難になり、スペースが無駄になります。

他のエンコードを行うこともできますが、通常は同じ問題が発生しやすくなります。

DBを使用するのは、このような作業を簡単に実行できるためです。配列を格納するためのテーブルは必要ありません。配列として表現できるテーブルが必要です。

例:

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

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

id | word
1  | Sports|Festivals|Classes|Other

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


2
区切り文字をエスケープする必要はありません!
クリスG.

2
@MarcBこれは、エンコーディングをばかばかしく、標準的で、バグが少なく、簡単にエクスポートして配列に戻すことができます。彼は別のテーブルを使用する必要がありますか?恐らく。これは、内破で言う誰よりも良いですか?もちろんです。
シークレット

6
この質問に対する正しい答えは、RDBMSにシリアル化された値を挿入しないことです。これは猛禽類召喚するようなものです。
NullUserException

1
@timdev:json-escapingは、状況によってはSQLエスケープに対応する場合がありますが、それに応じて結局はあなたを焼くだけです。JSONはバックスラッシュを使用します-バックスラッシュを認識せず、エスケープに二重引用符を使用するDBを使用している場合はどうなりますか?たとえばの''代わりに\'
マルクB

1
ここで述べた原則に同意しますが(通常の形式は良いですが、DBを使用して構造化するのは良いことです)、「いいえ、あなたは望まない...」で始まるすべての答えは私の頭の中に鐘を鳴らします。あなたは質問者の質問の完全なコンテキストを持っていません、そしてそれを信じるかどうか、彼らはこの特定のデータを非正規化して単一のフィールドに格納する優れた理由があるかもしれません。いいえ、あなたは全知ではありません。あなたは質問者が何を望んでいるのか分かりません。回答ではなくコメントにコメントを書き込んでください。
システムの一時停止、2014年

35

最良の方法の1つ:

echo print_r($array, true);

10
それが問題をどのように解決するかを示して、あなたの答えについて詳しく説明してください
バナナの私たちの男14年

1
「print_r($ array、false);」を使用することもできます。これは、値を返さずに配列を出力するためです。trueが指定されている場合、print_r()はそれ自体では印刷せず、単に文字列を返します。詳細:php.net/manual/en/function.print-r.php
Garrett

これはjson_decode混乱を招く形式を台無しにするので、最高のものになるはずです。
Aminah Nuraini 2017年


11

これはキーと値を保存します

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;
}

それが誰かを助けることを願っています。


6
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

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


5

ストア連想配列の場合は、次を使用できます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);

3

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を参照してください。


0

多くの方法があります、

このための2つの最良の方法は

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
//ouputs as
{"a":1,"b":2,"c":3,"d":4,"e":5}


$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r

あなたはすでに与えられた答えを繰り返しています。これは新しい値や新しいメソッドを追加しません。
Tschallacka

@Tschallackaそうですが、この投稿に対する回答がほとんどないので、出力が提供されます....
Daud Malik
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.