Array ke String PHP?

283

Apa metode terbaik untuk mengubah array PHP menjadi string?
Saya memiliki variabel $typeyang merupakan array tipe.

$type = $_POST[type];

Saya ingin menyimpannya sebagai string tunggal dalam database saya dengan setiap entri dipisahkan oleh | :

Olah Raga | Festival | Lainnya

Philip Kirkbride
sumber
24
Harap jangan memasukkan nilai serial ke dalam basis data. Inilah alasannya: stackoverflow.com/questions/7364803/…
NullUserException
14
@NullUserException ఠ_ఠ Saya setuju bahwa memasukkan nilai-nilai serial ke dalam DB benar-benar membakar mata, tetapi Anda tidak tahu situasinya - mungkin sangat mungkin dijamin.
AngryHacker
4
Saya pikir pertanyaan ini harus dibuka kembali. Ini adalah pertanyaan yang berguna untuk pemula dan saya pikir itu di luar topik.
SaidbakR
1
bagaimana jika beberapa nilai dalam array memiliki karakter |
sumit
Anda kemudian dapat melarikan diri karakter tersebut. Baca di sini. php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

Jawaban:

352

Gunakan implode

implode("|",$type);
Niet the Dark Absol
sumber
13
Ini bagus kecuali Anda memiliki array bersarang - yang dapat terjadi $_POSTjika Anda menggunakan input formulir yang diberi nama array.
Leith
dengan array bersarang hanya menggunakan foreach itu akan berfungsi.
deepcell
224

Anda dapat menggunakan json_encode ()

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

echo json_encode($arr);
?>

Kemudian gunakan json_decode () untuk mendekode string dari DB Anda. Hal lain tidak berguna, JSON menjaga hubungan array tetap utuh untuk penggunaan nanti!

Jakub
sumber
40
" Ada lagi yang tidak berguna " ... kecuali mungkin menormalkan data.
Dan Lugg
5
Rofl @ komentar di atas saya. Seperti yang Anda katakan, pernyataan selimut hampir selalu, tidak membantu.
Aaron Cole
12
Saya senang kalian terhibur :)
Jakub
16
"Generalisasi menyeluruh, dan juga absolut, selalu salah. Selalu." ;)
Olie
Saya suka ini menyimpan kunci. Ini sangat berguna untuk digunakan nanti.
Apolymoxic
45
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

MENGAPA JSON: Anda dapat menggunakannya dengan sebagian besar bahasa pemrograman, string yang dibuat oleh fungsi serialize () dari php hanya dapat dibaca dalam PHP, dan Anda tidak akan suka menyimpan hal-hal seperti itu di basis data Anda khususnya jika basis data dibagikan di antara aplikasi yang ditulis dalam bahasa pemrograman yang berbeda

sumit
sumber
1
JFI dalam penggunaan saya, saya harus memanggil $ data = json_decode ($ jsonString, true)
Terminality
Argumen kedua adalah opsional, dalam sebagian besar kasus itu berfungsi tanpa itu.
sumit
Ini berfungsi untuk array satu atau multi dimensi yang sangat baik dan menurut saya ini harus menjadi jawaban yang diterima. Juga pertimbangkan untuk menambahkan true sebagai parameter kedua.
Gabungkan
36

Tidak, Anda tidak ingin menyimpannya sebagai string tunggal di basis data Anda seperti itu.

Anda bisa menggunakannya serialize() tetapi ini akan membuat data Anda lebih sulit untuk dicari, lebih sulit untuk dikerjakan, dan membuang ruang.

Anda dapat melakukan beberapa pengkodean lainnya, tetapi umumnya cenderung mengalami masalah yang sama.

Seluruh alasan Anda memiliki DB adalah agar Anda dapat menyelesaikan pekerjaan seperti ini dengan sepele. Anda tidak perlu tabel untuk menyimpan array, Anda perlu tabel yang bisa Anda wakili sebagai array.

Contoh:

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

Anda cukup memilih data dari tabel dengan SQL, daripada memiliki tabel yang terlihat seperti:

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

Itu bukan bagaimana orang mendesain skema dalam database relasional, itu benar-benar mengalahkan tujuan itu.

Penyamaran
sumber
2
yakin itu, Anda tidak perlu melarikan diri dari pembatas!
Chris G.
2
@MarcB Ini membuat pengkodean idiot-proof, standar, rentan terhadap lebih sedikit bug, dan mudah diekspor kembali ke array. Haruskah dia menggunakan meja lain? Mungkin. Apakah ini lebih baik daripada semua orang mengatakan meledak? Benar.
Incognito
6
Jawaban yang tepat untuk pertanyaan ini adalah: jangan masukkan nilai serial ke dalam RDBMS. Ini adalah jenis hal yang harus memanggil raptor .
NullUserException
1
@timdev: json-escaping mungkin dalam beberapa situasi berhubungan dengan SQL escaping, tetapi tergantung pada itu hanya akan membakar Anda pada akhirnya. JSON menggunakan garis miring terbalik - bagaimana jika Anda menggunakan DB yang tidak mengenali garis miring terbalik dan menggunakan tanda kutip ganda untuk melarikan diri? misalnya ''bukan \'?
Marc B
1
Sementara saya setuju dengan prinsip yang diungkapkan di sini (bentuk normal baik, menggunakan DB untuk struktur baik, ya), setiap jawaban yang dimulai dengan "Tidak, Anda tidak ingin ..." mematikan lonceng di kepala saya. Anda tidak memiliki konteks penuh dari pertanyaan si penanya, dan percaya atau tidak, mereka mungkin hanya memiliki alasan yang bagus untuk mendenormalkan data khusus ini dan menyimpannya dalam satu bidang. Tidak, Anda tidak mahatahu; Anda TIDAK tahu apa yang diinginkan penanya. Tolong tuliskan opini Anda dalam komentar , bukan jawaban .
system PAUSE
35

Salah satu cara terbaik:

echo print_r($array, true);
vvkatwss vvkatwss
sumber
10
tolong uraikan jawaban Anda, tunjukkan bagaimana ini memecahkan masalah
Our Man in Panan
1
Anda juga dapat menggunakan: "print_r ($ array, false);", karena ini akan mencetak array tanpa mengembalikan nilai. Jika benar diberikan, print_r () tidak akan mencetak sendiri dan hanya akan mengembalikan string. Lebih lanjut di: php.net/manual/en/function.print-r.php
Garrett
Ini harus menjadi yang terbaik karena json_decodemengacaukan format yang menyebabkan kebingungan.
Aminah Nuraini
14

implode () :

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

Namun, Incognito benar, Anda mungkin tidak ingin menyimpannya seperti itu - ini benar-benar pemborosan kekuatan relasional dari database Anda.

Jika Anda tidak dapat mengatur serialisasi, Anda mungkin juga mempertimbangkan untuk menggunakan json_encode ()

timdev
sumber
implode terbatas pada array datar
ahnbizcad
11

Yang ini menyimpan KUNCI & NILAI

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

Semoga ini bisa membantu seseorang.

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

$string_array = json_encode($data);

sekarang Anda dapat memasukkan nilai $ string_array ini ke dalam Database

Akbar Mirsiddikov
sumber
5

Untuk array asosiatif toko, Anda dapat menggunakan serialize:

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

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

Dan muat menggunakan unserialize:

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

print_r($arr);

Tetapi jika perlu membuat .phpfile dinamis dengan array (misalnya file konfigurasi), Anda dapat menggunakan var_export(..., true);, seperti ini:

Simpan dalam file:

$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);

Dapatkan nilai array:

$arr = include 'config.php';

print_r($arr);
Guilherme Nascimento
sumber
3

Anda dapat menggunakan fungsi string PHP implode()

Suka,

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

Misalnya, jika $sports='football'; $festival='janmastami'; $food='biriyani';

Maka output akan menjadi:

football|janmastami|biriyani

Untuk detail lebih lanjut tentang fungsi PHP implode () lihat w3schools


sumber
0

ada banyak cara,

dua cara terbaik untuk ini adalah

$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
Daud Malik
sumber
Anda mengulangi jawaban yang sudah diberikan. Ini tidak menambah nilai baru atau metode baru.
Tschallacka
@ Schallacka ya tapi sangat sedikit jawaban di posting ini yang memberikan output ....
Daud Malik