Array to String PHP หรือไม่


282

วิธีที่ดีที่สุดในการแปลงอาร์เรย์ PHP เป็นสตริงคืออะไร?
ฉันมีตัวแปร$typeซึ่งเป็นประเภทอาเรย์

$type = $_POST[type];

ฉันต้องการเก็บไว้เป็นสตริงเดียวในฐานข้อมูลของฉันโดยที่แต่ละรายการคั่นด้วย|:

กีฬา | เทศกาล | อื่น ๆ


24
โปรดหลีกเลี่ยงการแทรกค่าที่ต่อเนื่องกันเป็นฐานข้อมูล นี่คือเหตุผล: stackoverflow.com/questions/7364803/…
NullUserException

14
@NullUserException ఠ_ఠฉันยอมรับว่าการแทรกค่าที่ต่อเนื่องกันลงในฐานข้อมูลนั้นทำให้ตาไหม้ แต่คุณไม่ทราบว่าสถานการณ์ของเขาเป็นอย่างไร
AngryHacker

4
ฉันคิดว่าคำถามนี้ควรจะเปิดใหม่ มันเป็นคำถามที่มีประโยชน์สำหรับผู้เริ่มต้นและฉันไม่คิดว่ามันเป็นนอกหัวข้อ
SaidbakR

1
เกิดอะไรขึ้นถ้าค่าบางอย่างในอาร์เรย์มีตัวอักษร |
sumit

จากนั้นคุณสามารถหลบหนีตัวละครเหล่านั้น อ่านที่นี่ php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

คำตอบ:


352

เพียงใช้implode

implode("|",$type);

13
สิ่งนี้เป็นสิ่งที่ดีเว้นแต่คุณจะมีอาร์เรย์ที่ซ้อนกันซึ่งอาจเกิดขึ้นได้$_POSTหากคุณใช้อินพุตในรูปแบบชื่ออาร์เรย์
Leith

กับอาร์เรย์ที่ซ้อนกันเพียงใช้ foreach มันจะทำงาน
deepcell

224

คุณสามารถใช้json_encode ()

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

echo json_encode($arr);
?>

ในภายหลังเพียงใช้json_decode ()เพื่อถอดรหัสสตริงจากฐานข้อมูลของคุณ สิ่งอื่นใดที่ไร้ประโยชน์ JSON ยังคงรักษาความสัมพันธ์ของอาเรย์ไว้เพื่อการใช้งานในภายหลัง!


40
" อะไรก็ได้ที่ไร้ประโยชน์ " ... ยกเว้นอาจทำให้ข้อมูลเป็นปกติ
Dan Lugg

5
Rofl @ ความคิดเห็นข้างบนฉัน อย่างที่คุณพูดงบผ้าห่มมักจะไม่ช่วยเหลือ
Aaron Cole

12
ฉันดีใจที่พวกคุณได้รับความบันเทิง :)
Jakub

16
"การกวาดภาพรวมตลอดจนข้อผิดพลาดนั้นผิดเสมอเสมอ" ;)
Olie

ฉันชอบที่คนนี้เก็บกุญแจ สิ่งนี้มีประโยชน์มากสำหรับการใช้ในภายหลัง
Apolymoxic

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

ทำไม JSON: คุณสามารถใช้กับภาษาการเขียนโปรแกรมส่วนใหญ่สตริงที่สร้างโดย serialize () ฟังก์ชั่นของ php สามารถอ่านได้ใน PHP เท่านั้นและคุณจะไม่ชอบที่จะเก็บสิ่งต่าง ๆ ในฐานข้อมูลของคุณเป็นพิเศษหากมีการแบ่งปันฐานข้อมูล ภาษาโปรแกรมที่แตกต่างกัน


1
JFI ในการใช้งานของฉันฉันต้องโทร $ data = json_decode ($ jsonString, จริง)
Terminals

อาร์กิวเมนต์ที่สองเป็นทางเลือกในกรณีส่วนใหญ่จะทำงานโดยไม่มีสิ่งนั้น
sumit

มันใช้งานได้สำหรับอาร์เรย์เดี่ยวหรือหลายมิติที่ยอดเยี่ยมและในความเห็นของฉันนี่ควรเป็นคำตอบที่ยอมรับได้ ลองพิจารณาเพิ่มจริงเป็นพารามิเตอร์ที่สอง
รวม

36

ไม่คุณไม่ต้องการเก็บไว้เป็นสายอักขระเดียวในฐานข้อมูลของคุณ

คุณสามารถใช้ serialize()แต่สิ่งนี้จะทำให้ข้อมูลของคุณค้นหายากขึ้นทำงานได้ยากขึ้นและเปลืองพื้นที่

คุณสามารถทำการเข้ารหัสอื่น ๆ ได้เช่นกัน แต่โดยทั่วไปแล้วมักจะเกิดปัญหาเดียวกัน

เหตุผลทั้งหมดที่คุณมีฐานข้อมูลคือเพื่อให้คุณสามารถทำงานเช่นนี้ได้สำเร็จ คุณไม่จำเป็นต้องใช้ตารางในการจัดเก็บอาร์เรย์คุณจำเป็นต้องมีตารางที่คุณสามารถใช้แทนอาร์เรย์ได้

ตัวอย่าง:

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

คุณเพียงแค่เลือกข้อมูลจากตารางด้วย SQL แทนที่จะมีตารางที่มีลักษณะดังนี้:

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

นั่นไม่ใช่วิธีที่ใครออกแบบสคีมาในฐานข้อมูลเชิงสัมพันธ์ แต่มันก็เอาชนะจุดประสงค์ของมันโดยสิ้นเชิง


2
แน่นอนว่าคุณไม่ต้องหลบหนีจากตัวคั่น!
Chris G.

2
@MarcB มันทำให้การเข้ารหัสงี่เง่าที่พิสูจน์ได้มาตรฐานมีแนวโน้มที่จะมีข้อบกพร่องน้อยลงและส่งออกได้อย่างง่ายดายกลับไปที่อาร์เรย์ เขาควรใช้โต๊ะอื่นหรือไม่ อาจ. มันดีกว่าทุกคนที่พูดว่าระเบิดหรือไม่ อย่างแน่นอน
ไม่ระบุตัวตน

6
คำตอบที่ถูกต้องสำหรับคำถามนี้คือ: อย่าใส่ค่าที่เป็นอนุกรมใน RDBMS นี้เป็นชนิดของสิ่งที่ควรเรียกแร็พเตอร์
NullUserException

1
@timdev: json-escaping ในบางสถานการณ์อาจสอดคล้องกับ SQL escaping แต่ขึ้นอยู่กับว่าคุณเพิ่งจะเผาไหม้คุณในที่สุด JSON ใช้แบ็กสแลช - ถ้าคุณใช้ DB ที่ไม่รู้จักแบ็กสแลชและใช้เครื่องหมายอัญประกาศคู่เพื่อการหลบหนี เช่น''แทน\'?
Marc B

1
ในขณะที่ฉันเห็นด้วยกับหลักการที่แสดงที่นี่ (รูปแบบปกติดีการใช้ DB to structure เป็นสิ่งที่ดี, duh) คำตอบใด ๆที่ขึ้นต้นด้วย "ไม่คุณไม่ต้องการ ... " ตั้งเสียงระฆังไว้ในหัวของฉัน คุณไม่มีบริบทที่สมบูรณ์ของคำถามของผู้ถามและเชื่อหรือไม่ว่าพวกเขาอาจมีเหตุผลที่ยอดเยี่ยมในการทำให้ข้อมูลนี้ผิดปกติและเก็บไว้ในเขตข้อมูลเดียว ไม่คุณไม่รอบรู้ คุณไม่รู้ว่าผู้ถามต้องการอะไร ใส่ความคิดเห็นของคุณในความคิดเห็นไม่ใช่คำตอบโปรด
ระบบหยุดชั่วคราว

35

หนึ่งในวิธีที่ดีที่สุด:

echo print_r($array, true);

10
โปรดอธิบายรายละเอียดเกี่ยวกับคำตอบของคุณโดยแสดงว่ามันแก้ปัญหาได้อย่างไร
Our Man in Bananas

1
นอกจากนี้คุณยังสามารถใช้: "print_r ($ array, false);" เช่นนี้จะพิมพ์อาร์เรย์โดยไม่ส่งคืนค่า หากได้รับความจริง print_r () จะไม่พิมพ์ด้วยตัวเองและจะคืนค่าสตริง เพิ่มเติมได้ที่: php.net/manual/en/function.print-r.php
Garrett

อันนี้ควรจะดีที่สุดตั้งแต่json_decodeสับสนกับรูปแบบที่ก่อให้เกิดความสับสน
Aminah Nuraini

14

implode () :

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

อย่างไรก็ตามการไม่ระบุตัวตนนั้นถูกต้องคุณอาจไม่ต้องการจัดเก็บในลักษณะนั้น - เป็นการสิ้นเปลืองพลังงานโดยรวมของฐานข้อมูลของคุณ

หากคุณตั้งค่าซีเรียลไลซ์แล้วคุณอาจลองใช้json_encode ()



11

อันนี้จะบันทึก KEYS & VALUES

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ไฟล์creat dinamic ที่มีอาเรย์ (เช่นไฟล์กำหนดค่า) คุณสามารถใช้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

มีหลายวิธี

สองวิธีที่ดีที่สุดสำหรับสิ่งนี้คือ

$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.